程序员黑科技 | 用13块钱DIY微信小程序浇花神器
作者:iotzheng,騰訊TEG平臺開發(fā)工程師(江湖人稱IoT小能手)
前言
去年7月的時候,公司辦了一場王者榮耀大賽,我和同事們也報名參加了。首局比賽就給我們潑了冷水,“深圳灣一號業(yè)主”無情摧殘了“祖國的花朵”。
作為“祖國的花朵”隊的替補射手,我心如刀割。
“為什么這樣對祖國的花朵?你們平常不種花的嗎?”?
“沒辦法啊,你知道深圳灣一號這種房子很大的,每天澆花得走好久。”?
“哼!總有一天我會讓你們明白!”
小能手當時就下了決心,必須要讓“深圳灣一號業(yè)主”明白,要讓他們明白,房子再大也是可以輕松澆花的!
沒過幾天,小能手就基于騰訊云物聯(lián)網(wǎng)開發(fā)平臺做出來一個澆花器,隨時隨地打開微信小程序就可以查看盆栽的土壤情況,并且進行遠程澆花。這樣,長期出差的朋友,以及陽臺路程達10分鐘的業(yè)主們,都得以輕松呵護自己的花花草草。
這篇文章梳理了當時的方案設計和實現(xiàn),給朋友們做個參考。
1 方案簡介
1.1 總體方案
端側通過 TencentOS tiny 定制 EVB_MX 開發(fā)板外掛一個濕度傳感器和水泵,通過 LoRaWAN 模組及網(wǎng)關與騰訊云物聯(lián)網(wǎng)開發(fā)平臺進行通信,應用層使用微信小程序來查看濕度和控制水泵澆水。
總體系統(tǒng)架構先放這邊,接下來具體說說。
1.2 關于節(jié)點功能的考慮
小米曾經出了一款“花花草草檢測儀”,可以檢測光照、酸堿度、溫濕度,采集數(shù)據(jù)指導小白用戶如何更好地種花。這個產品是很好,但是它終于是單向的,只能檢測,不能輸出,就是說你看到小花快渴死了,但仍做不了什么。
所以小能手希望做一個能遠程澆花的設備,不如就叫它“花花草草守護儀”。
另外結合網(wǎng)上熱心網(wǎng)友的反饋,我決定砍掉光照、酸堿度、溫度這幾個非剛需的傳感器,采用濕度傳感器長期監(jiān)控土壤的情況。
1.3 關于聯(lián)網(wǎng)方式的考慮
深圳灣一號的套均建筑面積得有三四百平了吧,這要是用普通的 WiFi,業(yè)主們肯定還是會受到覆蓋不足的困擾。貼心的小能手使用了目前物聯(lián)網(wǎng)領域最火的技術 LoRa,低功耗遠距離,真是別墅物聯(lián)網(wǎng)應用的不二之選。
2 詳細設計方案及實現(xiàn)
有了上面的構思之后,接下來描述詳細設計方案及相應的實現(xiàn)。
2.1 澆花器硬件設計
硬件直接采用騰訊云物聯(lián)網(wǎng) TencentOS tiny EVB_MX 開發(fā)板,自帶瑞興恒方的 LoRa 模組。外設部分,從網(wǎng)上花了 13 塊錢購買了水泵和土壤濕度采集器。其中水泵只需要一個IO操作即可,濕度采集器可使用AD采集。
硬件連接部分有個要注意的,在電源部分,水泵這種大功率設備如果直接接到開發(fā)板會引起電源波動,會影響 LoRa 射頻的信號接收,因此我是單獨給水泵再供電5V。
2.2 澆花器軟件設計
澆花器業(yè)務上采用 LoRaWAN Class C 模式,這樣可以實時獲取到開關水泵的指令。同時周期性地上報相對濕度。
軟件協(xié)議設計比較簡單,且LoRa應用也建議使用精簡的應用數(shù)據(jù),我在發(fā)送時使用一個字節(jié),采集土壤濕度的百分比;接收時也使用一個字節(jié),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; }對函數(shù)中的 AD 換算公式做個簡單的說明,本能手在網(wǎng)上買了十來塊錢的土壤濕度傳感器。這玩意不能探測絕對濕度,于是本能手做了一些實測,根據(jù)干燥空氣以及浸沒水中的 AD 數(shù)值情況,得到了一個簡易的公式,來測量土壤的含水量 0% ~ 100%。
燒寫固件后,“花花草草守護儀”就開始周期性上報土壤濕度數(shù)據(jù)。
[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: Done2.3 騰訊云 IoT Explorer 產品及設備處理
端側處理完畢后,接下來在云平臺上創(chuàng)建產品和設備。
云平臺服務采用?騰訊云物聯(lián)網(wǎng)開發(fā)平臺(IoT Explorer)?,創(chuàng)建了一個 LoRaWAN 通信方式的產品,在設備參數(shù)部分選擇 Class C 模式。
同時給“花花草草守護儀”定義了自己的數(shù)據(jù)模板,包含兩個屬性,一個水泵開關 pump_switch,一個土壤相對濕度 soil_moisture。
相應的設備數(shù)據(jù)解析腳本如下,簡單處理下兩個屬性:
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=5data[1] = 0;// unconfirmed modedata[2] = obj.params.pump_switch;return data; }2.4 微信小程序
TencentOS tiny 的倉庫中已經幫助大家做好了幾個現(xiàn)成的小程序 DEMO,目錄為 TencentOStiny/tools/MiniProgram/,因此我就偷個懶在上面修改下,主要功能是實現(xiàn)開泵澆水以及土壤濕度的查看。
3 成果展示
再添加一個動圖。
至此,相應深圳灣一號的伙伴們應該明白了,房子太大也是可以輕松澆花的。
怎么,只看文章覺得不過癮?掃描下方二維碼,看程序員的澆花小視頻
騰訊技術課直播預告:
4月30日(今天)晚上8點-9點
總結
以上是生活随笔為你收集整理的程序员黑科技 | 用13块钱DIY微信小程序浇花神器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Golang 性能优化实战
- 下一篇: 大牛书单 | 腾讯技术大咖推荐你五一看这