資料介紹
描述
在巴黎 Usine.io 舉辦的英特爾物聯(lián)網(wǎng)黑客馬拉松上,我有機(jī)會在英特爾 Edison Arduino 板和一堆 Grove 傳感器/執(zhí)行器旁邊,還從 Snootlab 獲得了新的 Akene 板。
感謝 Intel IoT 人員、來自 SigFox 的 Nicolas 以及 BeMyApp 的所有員工為這次 Hackaton...
第一步:項(xiàng)目...
我決定用 Intel Edison 板、Grove Shield、SigFox Akene Shield 和 I2C Grove TSL2561 構(gòu)建一個小型光傳感器站。
該站大約每 10 分鐘通過 SigFox 網(wǎng)絡(luò)上傳與該 10 分鐘周期相關(guān)的 3 個不同值(以勒克斯為單位):算術(shù)平均光、最小和最大光。
這將有助于了解這段時(shí)間內(nèi)光線如何圍繞其平均值波動,從而了解天空如何多云(如果至少有風(fēng)推動云層……)。
我將在該項(xiàng)目中使用 Python。
第 2 步:友好的開發(fā)環(huán)境
我假設(shè)英特爾 Edison 環(huán)境已準(zhǔn)備好用于 Python,并且在 Edison 上設(shè)置了密碼以打開 SSH 會話和 SFTP 以上傳 Python 代碼。
我正在使用 OS X,并將使用 CoolTerm 進(jìn)行通信,并使用出色的 TextWrangler 作為代碼編輯器和代碼上傳器 (SFTP)。
第 3 步:框架:sensor.py
#!/usr/bin/env python import time import mraa # Sensor initialisation import pyupm_tsl2561 tsl2561Ready = True if (tsl2561Ready) : # 在 I2C 上實(shí)例化一個數(shù)字光傳感器 TSL2561 print "initialisation TLS2561" lightSensor = pyupm_tsl2561.TSL2561() time.sleep (10) # 值 numberSamples = 200 valueCount = 0 valueNow = 0 valueSum = 0 valueAvg = 0 valueMin = 32767 valueMax = 0 # 主循環(huán) while True : if (valueCount == numberSamples) : print print "after", numberSamples, "samples (以勒克斯為單位的值):" print "valueAvg: %5d" % valueAvg, "- valueMin: %5d" % valueMin, "- valueMax: %5d" % valueMax valueCount = 0 if (valueCount == 0) : valueNow = 0 valueSum = 0 valueAvg = 0 valueMin = 32767 valueMax = 0 if (tsl2561Ready) :valueNow = lightSensor.getLux() if (valueNow >= 0) : valueCount = valueCount + 1 valueSum = valueSum + valueNow valueAvg = valueSum / valueCount if valueNow < valueMin : valueMin = valueNow if valueNow > valueMax : valueMax = valueNow now = time。 ctime(int(time.time())) if (valueCount == 1) : print print "Light (luxes):" print now,"(GMT)",": %5d" % valueNow,"- avg :%5d" % valueAvg,"- min:%5d" % valueMin,"- max:%5d" % valueMax,"-%4d 個樣本" % valueCount time.sleep(1)valueMax = valueNow now = time.ctime(int(time.time())) if (valueCount == 1) : print print "Light (values in lux):" print now,"(GMT)",": %5d " % valueNow,"- avg:%5d" % valueAvg,"- min:%5d" % valueMin,"- max:%5d" % valueMax,"-%4d 個樣本" % valueCount time.sleep(1 )valueMax = valueNow now = time.ctime(int(time.time())) if (valueCount == 1) : print print "Light (values in lux):" print now,"(GMT)",": %5d " % valueNow,"- avg:%5d" % valueAvg,"- min:%5d" % valueMin,"- max:%5d" % valueMax,"-%4d 個樣本" % valueCount time.sleep(1 )
?
第 4 步:使用 sensor.py 得到什么
> 蟒蛇傳感器.py
第 5 步:SigFox 和 Akene 盾牌
Akene 板是 SnootLab 的實(shí)驗(yàn)性 Arduino 擴(kuò)展板,上面裝有 TD1208 SoC(片上系統(tǒng))。TD1208 是一款經(jīng)過 SigFox 認(rèn)證的無線電收發(fā)器,結(jié)合了 ARM Cortex M3,它實(shí)現(xiàn)了用于將值發(fā)送到 SigFox 操作的電信網(wǎng)絡(luò)的電信調(diào)制解調(diào)器堆棧,并且除了其串行調(diào)制解調(diào)器鏈路之外,還包括用于物聯(lián)網(wǎng)傳感器的 I2C 功能。
SIgFox 服務(wù)依賴于目前部署在西歐、舊金山以及其他國家或城市的 LPWA(低功耗廣域)網(wǎng)絡(luò)。SigFox 協(xié)議專為小消息而設(shè)計(jì),其技術(shù)專注于設(shè)備客戶端的能源效率和每個基礎(chǔ)設(shè)施基站的大區(qū)域覆蓋。
SigFox 網(wǎng)絡(luò)允許每個設(shè)備每天最多發(fā)送140 條消息(即每 1000 萬次),每個消息最多可發(fā)送12 個可用字節(jié),即 6 個短整數(shù)值(時(shí)間戳和唯一設(shè)備 ID 也會另外傳輸)。
更多信息: http: //maker.sigfox.com
?
第 6 步:讓我們確保 Akene shield 及其調(diào)制解調(diào)器正常工作
Akene shield 可以用作調(diào)制解調(diào)器,所以我們首先將它連接到 Edison:
? 地對地(黑線)
? 3.3v 至 3.3v(紅線)
? Edison 的串行 Rx(引腳 0)到 Akene 的 Tx(引腳 D4) - 藍(lán)線
? Edison 的串行 Tx(引腳 1)到 Akene 的 Rx(引腳 D5) - 白線
?
步驟 7:通過終端向 Akene shield 的 TD1208 發(fā)送直接命令
我們可以將 TD1208 視為調(diào)制解調(diào)器。
必須安裝 PySerial 包。
python -m serial.tools.miniterm
我們使用 miniterm(PySerial 的一部分) - 并指定串行端口:/dev/ttyMFD1 - 發(fā)送直接命令,例如:
?AT
應(yīng)該回復(fù)OK(否則有問題),
?AT&V
由TD1208標(biāo)識回復(fù),
?AT$SS01234567
它將 01234567 消息發(fā)送到 SigFox 網(wǎng)絡(luò)(最大十六進(jìn)制數(shù)字為 24,即 12 個字節(jié)),以及
?AT?
它返回可用命令的列表。
要退出 miniterm,在 OS X 上使用法語鍵盤:CTRL 6
?
第 8 步:向 SigFox 網(wǎng)絡(luò)發(fā)送消息的簡單 python 命令
這是專用于另一個 TD1208 板(來自 SNOC 的 RPISIGFOX)的 python 命令的快速改編,可在 Internet 上找到。
順便提一下,為了與英特爾愛迪生一起使用串行,
? 必須先初始化將要使用的端口/引腳,在我們的例子中是/dev/ttyMFD1(引腳0 和1):
import libmraa
x=Uart(0)
? 調(diào)用serial.Serial(......
您可以這樣使用命令:
python sendsigfox.py 01234567
這會將消息 01234567 發(fā)送到 SigFox 網(wǎng)絡(luò)
#!/usr/bin/python
# This script allow the control of the SNOOTLAB expansion board, and is adapted for Intel Edison.
# 3 lines of code were added (LINE ADDED)
# script has been modified from:
#
# This script is from the rpisigfox expansion board for Raspberry Pi.
#
# V1.0 allow only to send regular message on the SigFox Network.
# syntax is :
# sendsigfox MESSAGE
# where MESSAGE is a HEXA string encoded. Can be 2 to 24 characters representing 1 to 12 bytes.
# Example : sendsigfox 00AA55BF to send the 4 bytes 0x00 0xAA 0x55 0xBF
#
import time
import serial
import sys
from time import sleep
#LINE ADDED
import mraa
SOH = chr(0x01)
STX = chr(0x02)
EOT = chr(0x04)
ACK = chr(0x06)
NAK = chr(0x15)
CAN = chr(0x18)
CRC = chr(0x43)
def getc(size, timeout=1):
return ser.read(size)
def putc(data, timeout=1):
ser.write(data)
sleep(0.001) # give device time to prepare new buffer and start sending it
def WaitFor(ser, s, timeOut):
nbMax = 0
ser.timeout = timeOut
currentMsg = ''
while currentMsg.endswith(s) != True :
# should add a try catch here
c=ser.read()
if c != '' :
currentMsg += c
else :
print 'timeout waiting for ' + s
return False
nbMax = nbMax + 1
if nbMax > 150:
print 'Timeout expired'
return False
return True
print('Sending SigFox Message...')
#LINE ADDED: 0 ie '/dev/ttyMFD1'
uart = mraa.Uart(0)
modem = serial.Serial(
uart.getDevicePath(),
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
#LINE ADDED: closing serial before opening it, as otherwise the Edison serial seems to be already open by calling serial.Serial
modem.close()
modem.open()
modem.write('AT\r')
if (WaitFor(modem, 'OK', 3)):
print('SigFox Modem OK')
else:
print('SigFox Modem Error')
modem.close()
exit()
modem.write("AT$SS={0}\r".format(sys.argv[1]))
print('Sending ...')
if (WaitFor(modem, 'OK', 15)):
print('OK Message sent')
else:
print('Error Sending message')
modem.close()
exit()
modem.close()
?
第 9 步:使用 sendigfox.py 得到什么
>python sendigfox.py 346723
?
第 10 步:完整程序:sensor2sigfox.py
也沒有什么特別的困難,只是提一下:
? 每個發(fā)送的數(shù)據(jù)都是一個 2 字節(jié)的短整數(shù)。因此 valueAvg、valueMin 和 valueMax 是 6 個字節(jié),即 12 個十六進(jìn)制字符字符串。由于在我使用的情況下,SigFox 的設(shè)置是為了將數(shù)據(jù)重新發(fā)送到 actoboard.com,并且 actoboard.com 當(dāng)前接受 LittleEndian 字節(jié)順序的數(shù)據(jù),所以在發(fā)送之前,每個數(shù)據(jù)都會進(jìn)行相應(yīng)的轉(zhuǎn)換。 .
? Akene 防護(hù)罩完全插在 Grove 防護(hù)罩的頂部,為了將 Edison 串行的接線安裝在引腳 0 和 1 上以及將 Akene 串行的接線安裝在引腳 D4 和 D5 上,使用了帶子(0 到 D4 :白色表帶)和(1 到 D5:黃色表帶),見第一張圖......這意味著干凈的接線,但不可能使用愛迪生的引腳 4 和 5......
#!/usr/bin/env python
import time
import mraa
import serial
# convert a string (n chars) into its hexadecimal string representation (n bytes - 2*n chars)
def string2hex(s) :
return str(s).encode("hex")
# convert a short integer (2 bytes) into its hexadecimal (2 bytes) representation with BigEndian/LittleEndian bytes order
def short2hex(i, bigEndian) :
if (bigEndian) :
return "%04X" % i
else :
return "%04X" % (((i << 8) & 0xFF00) | ((i >> 8) & 0x00FF))
def WaitFor(serial, msg, timeOut):
nbMax = 0
serial.timeout = timeOut
currentMsg = ''
while currentMsg.endswith(msg) != True :
c = serial.read()
if c != '' :
currentMsg += c
else :
print 'timeout waiting for ' + msg
return False
nbMax = nbMax + 1
if nbMax > 150:
print 'Timeout expired'
return False
return True
def sendsigfox(data):
print('Sending SigFox Message...')
# 0 i.e. pins 0 and 1 i.e. '/dev/ttyMFD1' for Intel Edison, allow usage of UART on port 0
uart = mraa.Uart(0)
# define sigfox and implicitely makes a sigfox.open()
sigfox = serial.Serial(
uart.getDevicePath(),
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
sigfox.write('AT\r')
if (WaitFor(sigfox, 'OK', 3)):
print('SigFox Modem OK')
else:
print('SigFox Modem Error')
sigfox.close()
return False
print("sending data " + data + " to SigFox network:")
print("Sigfox: AT$SS=" + data + "\r")
sigfox.write("AT$SS=")
sigfox.write(data)
sigfox.write("\r")
if (WaitFor(sigfox, 'OK', 15)):
print('Message sent OK')
else:
print('Error Sending message')
sigfox.close()
return False
sigfox.close()
return True
# Sending Format of data - bytes order - required (True for BigEndian, False for LittleEndian)
# for sending to actoboard.com : LittleEndian (i.e. False) is expected for received data
sendingFormat = False
# Sensor initialisation
import pyupm_tsl2561
tsl2561Ready = True
if (tsl2561Ready) :
# Instantiate a digital light sensor TSL2561 on I2C
print "initialisation TLS2561"
lightSensor = pyupm_tsl2561.TSL2561()
time.sleep (10)
# Value
numberSamples = 200
valueCount = 0
valueNow = 0
valueSum = 0
valueAvg = 0
valueMin = 32767
valueMax = 0
# Main loop
while True :
if (valueCount == numberSamples) :
print
print "after", numberSamples, "samples (values in lux):"
print "valueAvg: %5d" % valueAvg, "- valueMin: %5d" % valueMin, "- valueMax: %5d" % valueMax
print "valueAvg: ", short2hex(valueAvg,True), "- valueMin: ", short2hex(valueMin,True), "- valueMax: ", short2hex(valueMax,True)
if (sendingFormat) :
print "sending valueAvg,valueMin,valueMax (BigEndian)"
else :
print "sending valueAvg,valueMin,valueMax (LittleEndian)"
sendsigfox(short2hex(valueAvg,sendingFormat)+short2hex(valueMin,sendingFormat)+short2hex(valueMax,sendingFormat))
valueCount = 0
if (valueCount == 0) :
valueNow = 0
valueSum = 0
valueAvg = 0
valueMin = 32767
valueMax = 0
if (tsl2561Ready) :
valueNow = lightSensor.getLux()
if (valueNow >= 0) :
valueCount = valueCount + 1
valueSum = valueSum + valueNow
valueAvg = valueSum / valueCount
if valueNow < valueMin :
valueMin = valueNow
if valueNow > valueMax :
valueMax = valueNow
now = time.ctime(int(time.time()))
if (valueCount == 1) :
print
print "Light (values in lux):"
print now,"(GMT)",": %5d" % valueNow,"- avg:%5d" % valueAvg,"- min:%5d" % valueMin,"- max:%5d" % valueMax,"-%4d sample(s)" % valueCount
time.sleep(1)
?
第 11 步:使用 sensor2sigfox.py 得到什么
python?sensor2sigfox.py
?
- 在線氣象站開源分享
- Chaac氣象站開源項(xiàng)目
- 天窗充電站開源分享
- WhatsApp通知站開源分享
- LDR傳感器開源案例
- 獨(dú)特的桌面氣象站開源設(shè)計(jì)
- WIFI氣象站開源分享
- 自動收費(fèi)站開源分享
- Arduino Nano氣象站開源
- 消息站開源資料分享
- U1-L025規(guī)格書——超小型槽型光電傳感器
- 超小型齊平膜片壓力傳感器 12次下載
- 光傳感器及傳感器與信號處理等知識的解析 25次下載
- 微型光傳感器
- 結(jié)構(gòu)光傳感器模型及特性分析
- 簡單的環(huán)境光傳感器電路 2006次閱讀
- 如何實(shí)現(xiàn)小型無線視頻傳感器的設(shè)計(jì) 1599次閱讀
- 基于zigbee CC2530和環(huán)境光傳感器實(shí)現(xiàn)照度計(jì)的設(shè)計(jì) 7651次閱讀
- dfrobotTEMT6000環(huán)境光傳感器介紹 8646次閱讀
- digilentPmodALS:環(huán)境光傳感器介紹 2698次閱讀
- 光纖傳感器的優(yōu)點(diǎn)_光纖傳感器的分類 6060次閱讀
- 光幕傳感器的組成_光幕傳感器的使用壽命 1260次閱讀
- 光幕傳感器工作原理及操作方法 9789次閱讀
- 環(huán)境光傳感器有什么用_環(huán)境光傳感器的作用 1.1w次閱讀
- Vishay推出了傳感器和光障系統(tǒng)應(yīng)用優(yōu)化的小型SMD接收器 752次閱讀
- 如何選擇合適的光傳感器 2136次閱讀
- 什么是光幕傳感器_光幕傳感器安裝及接線圖 2w次閱讀
- 小型化MEMS傳感器技術(shù)的簡述 2193次閱讀
- 光傳感器是什么?光傳感器的六大指標(biāo) 3749次閱讀
- 光隔離溫度傳感器監(jiān)視電路圖 1795次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論
查看更多