電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>小型光傳感器站開源分享

小型光傳感器站開源分享

2022-10-20 | zip | 0.05 MB | 次下載 | 2積分

資料介紹

描述

在巴黎 Usine.io 舉辦的英特爾物聯(lián)網(wǎng)黑客馬拉松上,我有機會在英特爾 Edison Arduino 板和一堆 Grove 傳感器/執(zhí)行器旁邊,還從 Snootlab 獲得了新的 Akene 板。

感謝 Intel IoT 人員、來自 SigFox 的 Nicolas 以及 BeMyApp 的所有員工為這次 Hackaton...

第一步:項目...

我決定用 Intel Edison 板、Grove Shield、SigFox Akene Shield 和 I2C Grove TSL2561 構(gòu)建一個小型光傳感器站。

該站大約每 10 分鐘通過 SigFox 網(wǎng)絡(luò)上傳與該 10 分鐘周期相關(guān)的 3 個不同值(以勒克斯為單位):算術(shù)平均光、最小和最大光。

這將有助于了解這段時間內(nèi)光線如何圍繞其平均值波動,從而了解天空如何多云(如果至少有風推動云層……)。

我將在該項目中使用 Python。

第 2 步:友好的開發(fā)環(huán)境

?
pYYBAGNQx8eACpJSAABjC8Qfzgo184.png
Intel Edison + Arduino 分線板 + Grove shield
?

我假設(shè)英特爾 Edison 環(huán)境已準備好用于 Python,并且在 Edison 上設(shè)置了密碼以打開 SSH 會話和 SFTP 以上傳 Python 代碼。

我正在使用 OS X,并將使用 CoolTerm 進行通信,并使用出色的 TextWrangler 作為代碼編輯器和代碼上傳器 (SFTP)。

第 3 步:框架:sensor.py

#!/usr/bin/env python import time import mraa # Sensor initialisation import pyupm_tsl2561 tsl2561Ready = True if (tsl2561Ready) : # 在 I2C 上實例化一個數(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

?
pYYBAGNQx8uAcHrVAAB5-35csaU200.png
樣本輸出 - 傳感器值
?

第 5 步:SigFox 和 Akene 盾牌

?
poYBAGNQx82AAo_QAACIkVGXJHE319.png
Akene Arduino Shield,其 SIGFOX 模塊 (TD1208) 在左側(cè)
?

Akene 板是 SnootLab 的實驗性 Arduino 擴展板,上面裝有 TD1208 SoC(片上系統(tǒng))。TD1208 是一款經(jīng)過 SigFox 認證的無線電收發(fā)器,結(jié)合了 ARM Cortex M3,它實現(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è)計,其技術(shù)專注于設(shè)備客戶端的能源效率和每個基礎(chǔ)設(shè)施基站的大區(qū)域覆蓋。

SigFox 網(wǎng)絡(luò)允許每個設(shè)備每天最多發(fā)送140 條消息(即每 1000 萬次),每個消息最多可發(fā)送12 個可用字節(jié),即 6 個短整數(shù)值(時間戳和唯一設(shè)備 ID 也會另外傳輸)。

更多信息: http: //maker.sigfox.com

?

第 6 步:讓我們確保 Akene shield 及其調(diào)制解調(diào)器正常工作

?
poYBAGNQx9GAXJH9AABitEzsUuc433.png
Akene Shield 使用引腳 4 和 5 與 Sigfox 模塊通信。
?

Akene shield 可以用作調(diào)制解調(diào)器,所以我們首先將它連接到 Edison:

? 地對地(黑線)

? 3.3v 至 3.3v(紅線)

? Edison 的串行 Rx(引腳 0)到 Akene 的 Tx(引腳 D4) - 藍線

? 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)該回復OK(否則有問題),

?AT&V

由TD1208標識回復,

?AT$SS01234567

它將 01234567 消息發(fā)送到 SigFox 網(wǎng)絡(luò)(最大十六進制數(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

?
pYYBAGNQx9OAUmKsAAAtDAYIChQ355.png
樣本輸出
?

?

第 10 步:完整程序:sensor2sigfox.py

也沒有什么特別的困難,只是提一下:

? 每個發(fā)送的數(shù)據(jù)都是一個 2 字節(jié)的短整數(shù)。因此 valueAvg、valueMin 和 valueMax 是 6 個字節(jié),即 12 個十六進制字符字符串。由于在我使用的情況下,SigFox 的設(shè)置是為了將數(shù)據(jù)重新發(fā)送到 actoboard.com,并且 actoboard.com 當前接受 LittleEndian 字節(jié)順序的數(shù)據(jù),所以在發(fā)送之前,每個數(shù)據(jù)都會進行相應(yīng)的轉(zhuǎn)換。 .

? Akene 防護罩完全插在 Grove 防護罩的頂部,為了將 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

?
poYBAGNQx9aAUzAvAABketGRTMw878.png
樣本輸出
?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費