程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器
作者:iotzheng,騰訊TEG平臺開發工程師(江湖人稱IoT小能手)
前言
去年7月的時候,公司辦了一場王者榮耀大賽,我和同事們也報名參加了。首局比賽就給我們潑了冷水,“深圳灣一號業主”無情摧殘了“祖國的花朵”。
作為“祖國的花朵”隊的替補射手,我心如刀割。
“為什麼這樣對祖國的花朵?你們平常不種花的嗎?”
“沒辦法啊,你知道深圳灣一號這種房子很大的,每天澆花得走好久。”
“哼!總有一天我會讓你們明白!”
小能手當時就下了決心,必須要讓“深圳灣一號業主”明白,要讓他們明白,房子再大也是可以輕鬆澆花的!
沒過幾天,小能手就基於騰訊雲物聯網開發平臺做出來一個澆花器,隨時隨地開啟微信小程式就可以檢視盆栽的土壤情況,並且進行遠端澆花。這樣,長期出差的朋友,以及陽臺路程達10分鐘的業主們,都得以輕鬆呵護自己的花花草草。
這篇文章梳理了當時的方案設計和實現,給朋友們做個參考。
1 方案簡介
1.1 總體方案
端側通過 TencentOS tiny 定製 EVB_MX 開發板外掛一個溼度感測器和水泵,通過 LoRaWAN 模組及閘道器與騰訊雲物聯網開發平臺進行通訊,應用層使用微信小程式來檢視溼度和控制水泵澆水。
總體系統架構先放這邊,接下來具體說說。
1.2 關於節點功能的考慮
小米曾經出了一款“花花草草檢測儀”,可以檢測光照、酸鹼度、溫溼度,採集資料指導小白使用者如何更好地種花。這個產品是很好,但是它終於是單向的,只能檢測,不能輸出,就是說你看到小花快渴死了,但仍做不了什麼。
所以小能手希望做一個能遠端澆花的裝置,不如就叫它“花花草草守護儀”。
另外結合網上熱心網友的反饋,我決定砍掉光照、酸鹼度、溫度這幾個非剛需的感測器,採用溼度感測器長期監控土壤的情況。
1.3 關於聯網方式的考慮
深圳灣一號的套均建築面積得有三四百平了吧,這要是用普通的 WiFi,業主們肯定還是會受到覆蓋不足的困擾。貼心的小能手使用了目前物聯網領域最火的技術 LoRa,低功耗遠距離,真是別墅物聯網應用的不二之選。
2 詳細設計方案及實現
有了上面的構思之後,接下來描述詳細設計方案及相應的實現。
2.1 澆花器硬體設計
2.2 澆花器軟體設計
澆花器業務上採用 LoRaWAN Class C 模式,這樣可以實時獲取到開關水泵的指令。同時週期性地上報相對溼度。
軟體協議設計比較簡單,且LoRa應用也建議使用精簡的應用資料,我在傳送時使用一個位元組,採集土壤溼度的百分比;接收時也使用一個位元組,0表示關泵,1表示開泵。
static void McpsIndication(uint8_t* data, uint8_t len) { printf("McpsIndication len=%d data[0]=%d\n", len, data[0]); if (data[0] == 1) { Flower_SetPump(ON); } else { Flower_SetPump(OFF); } } void lorawan_demo(void) { int count = 1; extern int rhf76_lora_init(hal_uart_port_t uart_port); uint8_t humi; rhf76_lora_init(HAL_UART_PORT_0); tos_lora_module_recv_register(McpsIndication); tos_lora_module_join(); while (1) { if (count % 20 == 0) { humi = Flower_ReadHumi(); printf("## Flower_ReadHumit is %d \r\n", humi); tos_lora_module_send(&humi, 1); } count++; osDelay(500); } }
外設部分,ADC / GPIO 操作也不難,具體程式碼見下方:
void Flower_SetPump(PUMP_Status_ENUM onoff) { HAL_GPIO_WritePin(PUMP_GPIO_Port, PUMP_Pin, onoff == ON ? GPIO_PIN_RESET : GPIO_PIN_SET ); } uint8_t Flower_ReadHumi(void) { uint16_t advalue; uint8_t humi; HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1, 50); advalue = (uint16_t)HAL_ADC_GetValue(&hadc1); humi = (4000 - advalue)/15; if (humi > 100) { humi = 100; } return humi; }
對函式中的 AD 換算公式做個簡單的說明,本能手在網上買了十來塊錢的土壤溼度感測器。這玩意不能探測絕對溼度,於是本能手做了一些實測,根據乾燥空氣以及浸沒水中的 AD 數值情況,得到了一個簡易的公式,來測量土壤的含水量 0% ~ 100%。
燒寫韌體後,“花花草草守護儀”就開始週期性上報土壤溼度資料。
[10:36:59.591]收←◆## Flower_ReadHumit is 33 AT CMD: AT+CMSGHEX="21" [10:37:01.763]收←◆---------->+LOG: DEBUG 2112764 LORA RX, 500900000, SF12, 125KHz [10:37:02.762]收←◆---------->+LOG: DEBUG 2113763 LORA RX, 505300000, SF12, 125KHz [10:37:03.951]收←◆---------->+LOG: DEBUG 2114950 LORA RX, 60BB2509262083008DDE8D58, -32, 5 ---------->+CMSGHEX: ACK Received ---------->+CMSGHEX: RXWIN2, RSSI -32, SNR 5.0 ---------->+CMSGHEX: Done
2.3 騰訊雲 IoT Explorer 產品及裝置處理
端側處理完畢後,接下來在雲平臺上建立產品和裝置。
雲平臺服務採用 騰訊雲物聯網開發平臺(IoT Explorer) ,建立了一個 LoRaWAN 通訊方式的產品,在裝置引數部分選擇 Class C 模式。
同時給“花花草草守護儀”定義了自己的資料模板,包含兩個屬性,一個水泵開關 pump_switch,一個土壤相對溼度 soil_moisture。
相應的裝置資料解析指令碼如下,簡單處理下兩個屬性:
function RawToProtocol(fPort, bytes) {
var data = {
"method": "report",
"clientToken" : new Date(),
"params" : {}
};
data.params.soil_moisture = bytes[0];
return data;
}
function ProtocolToRaw(obj) {
var data = new Array();
data[0] = 5;// fport=5
data[1] = 0;// unconfirmed mode
data[2] = obj.params.pump_switch;
return data;
}
2.4 微信小程式
TencentOS tiny 的倉庫中已經幫助大家做好了幾個現成的小程式 DEMO,目錄為 TencentOStiny/tools/MiniProgram/,因此我就偷個懶在上面修改下,主要功能是實現開泵澆水以及土壤溼度的檢視。
3 成果展示
再新增一個動圖。
至此,相應深圳灣一號的夥伴們應該明白了,房子太大也是可以輕鬆澆花的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559354/viewspace-2690392/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微信小程式開發神器-Grace微信小程式
- 微信小程式設計師自動化測試微信小程式程式設計師
- 微信小程式應用安全分析及設計微信小程式
- 微信小程式開發系列二:微信小程式的檢視設計微信小程式
- 黑馬程式設計師程式設計師
- 微信小程式元件設計規範微信小程式元件
- 程式設計師【黑話】指南程式設計師
- 微信小程式開發系列 (四) :微信小程式的頁面跳轉路由設計微信小程式路由
- 分享一款管理微信小程式的神器微信小程式
- 黑科技開戶神器黑科技開戶神器黑科技開戶神器黑科技開戶神器黑科技開戶神器
- 微信小程式必用介面微信小程式
- 程式設計師跳槽必備神器程式設計師
- 微信小程式微信小程式
- 十款實用微信小程式推薦 好玩的微信小程式有哪些?微信小程式
- 皇家國際開戶微信18669187779程式設計師憑什麼這麼有錢?程式設計師
- 微信小程式設定背景圖微信小程式
- 程式設計師薅羊毛神器來了!程式設計師
- 程式設計師只配加班?有錢有閒的程式設計師都在哪?程式設計師
- 微信小程式入門教程之三:指令碼程式設計微信小程式指令碼程式設計
- 微信小程式搶紅包高併發設計微信小程式
- 做一個微信購物小程式需要多少錢?
- 微信小程式小技巧微信小程式
- 微信小程式(1) 微信小程式TLS版本大於1.2微信小程式TLS
- 程式設計師最重要的一點_面向金錢程式設計程式設計師
- 微信小程式路由微信小程式路由
- 提高微信小程式的應用速度微信小程式
- 微信小程式------全域性配置設定微信小程式
- 創業者,程式設計師必備神器創業程式設計師
- 旅遊類微信小程式該如何設計製作?微信小程式
- 微信小程式實現軌跡回放,微信原生小程式,基於uniapp的小程式?微信小程式APP
- 為什麼大多程式設計師黑php不黑python?程式設計師PHPPython
- 誰再黑程式設計師我就打誰程式設計師
- 黑馬程式設計師前端學習之路程式設計師前端
- 不黑程式設計師會死星人程式設計師
- 2018程式設計師工資大揭底!快來看看程式設計師賺多少錢!程式設計師
- 微信小程式開發系列(一) :開發環境搭建和微信小程式的檢視設計與開發微信小程式開發環境
- 程式設計師用SymPy程式設計師
- 微信小程式教程01:小程式簡介微信小程式