程式設計師黑科技 | 用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微信小程式
- 騰訊微信支付,程式設計師是如何讓jQuery程式碼付錢的程式設計師jQuery
- 程式設計師一週花多少時間程式設計?程式設計師
- 程式設計師的燈下黑:“逗到底”的程式設計師程式設計師
- 微信小程式設計師自動化測試微信小程式程式設計師
- 微信小程式應用安全分析及設計微信小程式
- 程式設計師跳槽必備神器程式設計師
- 黑馬程式設計師-Java概述程式設計師Java
- 微信小程式零基礎入門:小程式會是程式設計師的春天嗎?微信小程式程式設計師
- 程式設計師薅羊毛神器來了!程式設計師
- 微信小程式開發系列二:微信小程式的檢視設計微信小程式
- 程式設計師只配加班?有錢有閒的程式設計師都在哪?程式設計師
- 程式設計師DIY的真實版Wall-E程式設計師
- 程式設計師最重要的一點_面向金錢程式設計程式設計師
- 微信小程式元件設計規範微信小程式元件
- 程式設計師程式設計需要多少個小時?程式設計師
- 創業者,程式設計師必備神器創業程式設計師
- 誰再黑程式設計師我就打誰程式設計師
- 不黑程式設計師會死星人程式設計師
- 黑馬程式設計師前端學習之路程式設計師前端
- 黑馬程式設計師——型別轉換程式設計師型別
- 程式設計師小張死了程式設計師
- 分享一款管理微信小程式的神器微信小程式
- 程式設計師寫書到底賺錢嗎程式設計師
- 程式設計師越來越值錢了程式設計師
- 讓程式設計師跳槽的非錢原因程式設計師
- 獨立程式設計師如何賺錢致富程式設計師
- 黑馬程式設計師——Java學習筆記之⑦——“網路程式設計”程式設計師Java筆記
- 為什麼大多程式設計師黑php不黑python?程式設計師PHPPython
- 程式設計師到底是幹什麼的?請不要再黑程式設計師了程式設計師
- 微信小程式是什麼 微信小程式有什麼用?微信小程式
- 程式設計師應該知道的 13 個設計技巧程式設計師