ShineBlink 是一款零門檻、零開發(fā)環(huán)境、低代碼的萬能物聯(lián)網(wǎng)智能硬件開發(fā)板
機(jī)智云 為開發(fā)者提供傻瓜式硬件上云、接App/小程序的能力
結(jié)合 ShineBlink 和 機(jī)智云 開發(fā)者即使不懂嵌入式物聯(lián)網(wǎng)開發(fā)、云和App開發(fā),也能很快實(shí)現(xiàn)一款包含硬件、云和App的物聯(lián)網(wǎng)智能硬件。
一、本章實(shí)現(xiàn)功能介紹
Shinelink開發(fā)板通過采集PM2.5傳感器、紫外線傳感器、風(fēng)速傳感器、雨滴感應(yīng)傳感器、SHT溫濕度傳感器、氣壓傳感器采集數(shù)據(jù),數(shù)據(jù)通過ML302(4G通信模塊)將數(shù)據(jù)上傳至機(jī)智云,之后我們就可以在遠(yuǎn)程通過手機(jī)App或者Web網(wǎng)頁端來訪問這個氣象站測量的所有傳感器數(shù)據(jù)。
下圖是接線實(shí)物圖和App監(jiān)測頁面:

二、硬件端接線圖

注意:上面的電路傳感器比較多,要求給 ShineBlink 開發(fā)板提供5V的電源帶載能力至少大于1A。
三、材料清單

四、硬件端完整源代碼
--定義函數(shù):將傳感器輸出電壓(單位:mv)轉(zhuǎn)換成紫外線指數(shù)indexfunction GetUvIndex(v) if v < 50.0 then index = 0 elseif v < 227.0 then index = 1; elseif v < 318.0 then index = 2; elseif v < 408.0 then index = 3; elseif v < 503.0 then index = 4; elseif v < 606.0 then index = 5; elseif v < 696.0 then index = 6; elseif v < 795.0 then index = 7; elseif v < 881.0 then index = 8; elseif v < 976.0 then index = 9; elseif v < 1079.0 then index = 10; else index = 11 end return indexend--使能USB print輸出打印LIB_UsbConfig("CDC")--機(jī)智云平臺為每個產(chǎn)品類別分配的唯一PK和PS,一定要改成您自己的PK和PSPK = "7ebaec64beaf4e389a2957f38711fcda"PS = "b4a4ef17dbf74463b0f1b3c525a8b8de"--初始化4G模塊LIB_Giz4GConfig(PK,PS,1000,120,"UART0","D5","HIGH","D6","HIGH")--配置A0-A3這四個電壓采集通道同時開始工作,當(dāng)每個通道采集滿50個點(diǎn)時緩存滿,每個點(diǎn)的采集時間間隔為10msLIB_ADConfig(50,10000)--設(shè)置PM2.5傳感器占用TX1和RX1引腳LIB_ZPH04Config("UART1")--設(shè)置sht3x傳感器占用SCL0和SDA0引腳,并啟動傳感器以每秒出10個數(shù)據(jù)的頻率工作,repeatability="HIGH"時精度最高LIB_Sht3xConfig("IIC0","10","HIGH")--設(shè)置BMP280氣壓計(jì)傳感器占用SCL1和SDA1引腳,并啟動傳感器以每秒輸出26.32組數(shù)據(jù)的頻率工作LIB_BMP280Config("IIC1")--開始大循環(huán)while(GC(1) == true)do LIB_DelayMs(50) --查詢是否讀到溫濕度數(shù)據(jù)產(chǎn)生 sht3x_flag,sht3x_temp,sht3x_humi = LIB_Sht3xGetResult() if sht3x_flag == 1 then --打印讀到的溫濕度值,保留2位小數(shù) print(string.format("temp: %.2f\r\nhumi: %.2f", sht3x_temp, sht3x_humi)) --向機(jī)智云服務(wù)器發(fā)送(溫濕度)短整數(shù)型數(shù)值(舍去小數(shù)部分) LIB_SendToGizCloud("Rs1", math.floor(sht3x_temp)) LIB_SendToGizCloud("Rs2", math.floor(sht3x_humi)) end --查詢氣壓傳感器是否出數(shù) flag, temprature, pressure = LIB_BMP280GetResult() if flag == 1 then --如果傳感器此時有數(shù)據(jù) --溫度值保留兩位小數(shù),氣壓值去掉小數(shù)部分 print(string.format("temprature: %.2f pressure: %.0f Pa", temprature, pressure)) --向機(jī)智云服務(wù)器發(fā)送長整數(shù)型氣壓數(shù)值,單位:Pa LIB_SendToGizCloud("RL7", math.floor(pressure)) end --查詢是否讀到傳感器PM2.5值 flag, pm25_val = LIB_ZPH04GetPM25() if flag == 1 then --打印讀到的PM2.5值,保留1位小數(shù),單位:ug/m^3 print(string.format("PM2.5:%.1f", pm25_val)) --向機(jī)智云服務(wù)器發(fā)送(PM2.5)浮點(diǎn)型小數(shù)值(范圍應(yīng)是-1000.0~5000.0) LIB_SendToGizCloud("Rf1", pm25_val) end --查詢是否讀到A0端口的電壓采集值(風(fēng)速) A0_full_flag, A0_tab = LIB_ADCheckBufFull("A0") --每當(dāng)A0通道的緩存滿以后,計(jì)算緩存內(nèi)的50個元素的平均值,并換算成電壓值 --由LIB_ADConfig(50,10000)可以算出,此處大概是50X10000us=0.5秒執(zhí)行一次 if A0_full_flag == 1 then SUM = 0 for i = 1, #A0_tab do --此處#A0_tab的值是50,表示A0_tab表內(nèi)的元素個數(shù) SUM = SUM + A0_tab[i] end AVER = SUM / #A0_tab --計(jì)算平均采樣值 --將A0通道的AD值轉(zhuǎn)換成實(shí)際電壓打印出來 out_voltage = AVER*3.6/4096.0 --打印出傳感器輸出的電壓值,保留小數(shù)點(diǎn)后兩位,單位V print(string.format("wind voltage=%.2fV\r\n", out_voltage)) --向機(jī)智云服務(wù)器發(fā)送(風(fēng)速)浮點(diǎn)型小數(shù)值(范圍應(yīng)是-1000.0~5000.0) LIB_SendToGizCloud("Rf2", out_voltage) end --查詢是否讀到A1端口的電壓采集值(紫外線) A1_full_flag, A1_tab = LIB_ADCheckBufFull("A1") --每當(dāng)A1通道的緩存滿以后,計(jì)算緩存內(nèi)的50個元素的平均值,并換算成電壓值 --由LIB_ADConfig(50,10000)可以算出,此處大概是50X10000us=0.5秒執(zhí)行一次 if A1_full_flag == 1 then SUM = 0 for i = 1, #A1_tab do --此處#A1_tab的值是50,表示A1_tab表內(nèi)的元素個數(shù) SUM = SUM + A1_tab[i] end AVER = SUM / #A1_tab --計(jì)算平均采樣值 --將A0通道的AD值轉(zhuǎn)換成實(shí)際電壓打印出來 vol_mv = AVER*3600/4096.0 --打印出傳感器輸出的電壓值,保留小數(shù)點(diǎn)后兩位,單位mV print(string.format("ultraviolet voltage=%.2fmV\r\n", vol_mv)) uv_index = GetUvIndex(vol_mv)--將電壓轉(zhuǎn)換成紫外等級指數(shù) --打印紫外線等級,0~11 print(string.format("ultraviolet level=%d\r\n", uv_index)) --向機(jī)智云服務(wù)器發(fā)送紫外線等級,短整數(shù)型 LIB_SendToGizCloud("Rs3", uv_index) end --查詢是否讀到A2端口的電壓采集值(雨滴感應(yīng)) A2_full_flag, A2_tab = LIB_ADCheckBufFull("A2") --每當(dāng)A2通道的緩存滿以后,計(jì)算緩存內(nèi)的50個元素的平均值,并換算成電壓值 --由LIB_ADConfig(50,10000)可以算出,此處大概是50X10000us=0.5秒執(zhí)行一次 if A2_full_flag == 1 then SUM = 0 for i = 1, #A2_tab do --此處#A2_tab的值是50,表示A2_tab表內(nèi)的元素個數(shù) SUM = SUM + A2_tab[i] end AVER = SUM / #A2_tab --計(jì)算平均采樣值 --將A0通道的AD值轉(zhuǎn)換成實(shí)際電壓打印出來 vol = AVER*3.6/4096.0 --打印雨滴傳感器輸出的電壓值,保留小數(shù)點(diǎn)后兩位,單位V print(string.format("rain voltage=%.2fV\r\n", vol)) --向機(jī)智云服務(wù)器發(fā)送(雨滴值)浮點(diǎn)型小數(shù)值(范圍應(yīng)是-100.00~500.00) LIB_SendToGizCloud("Rf3", vol) endend
五、機(jī)智云接入和App開發(fā)
無論使用哪種方法實(shí)現(xiàn)APP控制,都必須先定義數(shù)據(jù)點(diǎn)。
本例中我們使用了"Rf1","Rf2","Rf3","Rs1","Rs2","Rs3","RL7"這七個數(shù)據(jù)點(diǎn)分別作為PM2.5,風(fēng)速,雨滴,溫度,濕度,紫外線等級,大氣壓強(qiáng)這七個傳感器值上傳數(shù)據(jù)通道,記得在機(jī)智云平臺修改相應(yīng)的數(shù)據(jù)點(diǎn)的名稱。

方法一:使用機(jī)智云測試APP
先在機(jī)智云開發(fā)者中心定義好數(shù)據(jù)點(diǎn)
隨后下載機(jī)智云測試APP
使用機(jī)智云測試APP掃描4G模塊二維碼
即可實(shí)現(xiàn)APP控制設(shè)備了。
具體過程可參考:
http://www.shineblink.com/html/gizwits/9_3_4GJoin/4GJoin.html
方法二:使用賽博坦工具零代碼定制版App
在機(jī)智云開發(fā)者中心定義好數(shù)據(jù)點(diǎn)后,
創(chuàng)建一個移動應(yīng)用,定義相應(yīng)的頁面信息
再關(guān)聯(lián)相應(yīng)的智能產(chǎn)品,
即可實(shí)現(xiàn)定制版App訪問設(shè)備。
開發(fā)好以后的頁面如下:

-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2938文章
46990瀏覽量
403707
發(fā)布評論請先 登錄
超聲波氣象站:精準(zhǔn)監(jiān)測的技術(shù)新選擇
小型自動氣象站:精細(xì)化氣象監(jiān)測的技術(shù)革新與應(yīng)用拓展
超聲波自動氣象站技術(shù)方案
北斗自動氣象站: 護(hù)航無網(wǎng)區(qū)的 “氣象信使”
防爆工業(yè)氣象站:工業(yè)場景的 “氣象監(jiān)測中樞”
光伏實(shí)驗(yàn)氣象站的技術(shù)架構(gòu)與應(yīng)用實(shí)踐
解密交通氣象站:數(shù)據(jù)驅(qū)動的交通氣象服務(wù)革新

實(shí)操案例:基于Shineblink和機(jī)智云的4G氣象站
評論