程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器

騰訊技術工程發表於2020-05-07

作者:iotzheng,騰訊TEG平臺開發工程師(江湖人稱IoT小能手)

前言

去年7月的時候,公司辦了一場王者榮耀大賽,我和同事們也報名參加了。首局比賽就給我們潑了冷水,“深圳灣一號業主”無情摧殘了“祖國的花朵”。

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器

作為“祖國的花朵”隊的替補射手,我心如刀割。

“為什麼這樣對祖國的花朵?你們平常不種花的嗎?” 

“沒辦法啊,你知道深圳灣一號這種房子很大的,每天澆花得走好久。” 


“哼!總有一天我會讓你們明白!”

小能手當時就下了決心,必須要讓“深圳灣一號業主”明白,要讓他們明白,房子再大也是可以輕鬆澆花的!


沒過幾天,小能手就基於騰訊雲物聯網開發平臺做出來一個澆花器,隨時隨地開啟微信小程式就可以檢視盆栽的土壤情況,並且進行遠端澆花。這樣,長期出差的朋友,以及陽臺路程達10分鐘的業主們,都得以輕鬆呵護自己的花花草草。

這篇文章梳理了當時的方案設計和實現,給朋友們做個參考。


1 方案簡介

1.1 總體方案

端側透過 TencentOS tiny 定製 EVB_MX 開發板外掛一個溼度感測器和水泵,透過 LoRaWAN 模組及閘道器與騰訊雲物聯網開發平臺進行通訊,應用層使用微信小程式來檢視溼度和控制水泵澆水。

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器

總體系統架構先放這邊,接下來具體說說。


1.2 關於節點功能的考慮

小米曾經出了一款“花花草草檢測儀”,可以檢測光照、酸鹼度、溫溼度,採集資料指導小白使用者如何更好地種花。這個產品是很好,但是它終於是單向的,只能檢測,不能輸出,就是說你看到小花快渴死了,但仍做不了什麼。

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器

所以小能手希望做一個能遠端澆花的裝置,不如就叫它“花花草草守護儀”。


另外結合網上熱心網友的反饋,我決定砍掉光照、酸鹼度、溫度這幾個非剛需的感測器,採用溼度感測器長期監控土壤的情況。


1.3 關於聯網方式的考慮

深圳灣一號的套均建築面積得有三四百平了吧,這要是用普通的 WiFi,業主們肯定還是會受到覆蓋不足的困擾。貼心的小能手使用了目前物聯網領域最火的技術 LoRa,低功耗遠距離,真是別墅物聯網應用的不二之選。


2 詳細設計方案及實現

有了上面的構思之後,接下來描述詳細設計方案及相應的實現。

2.1 澆花器硬體設計

硬體直接採用騰訊雲物聯網 TencentOS tiny EVB_MX 開發板,自帶瑞興恆方的 LoRa 模組。外設部分,從網上花了 13 塊錢購買了水泵和土壤溼度採集器。其中水泵只需要一個IO操作即可,溼度採集器可使用AD採集。

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器

硬體連線部分有個要注意的,在電源部分,水泵這種大功率裝置如果直接接到開發板會引起電源波動,會影響 LoRa 射頻的訊號接收,因此我是單獨給水泵再供電5V。

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器


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。

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器

相應的裝置資料解析指令碼如下,簡單處理下兩個屬性:

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/,因此我就偷個懶在上面修改下,主要功能是實現開泵澆水以及土壤溼度的檢視。

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器


3 成果展示

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器

再新增一個動圖。

程式設計師黑科技 | 用13塊錢DIY微信小程式澆花神器

至此,相應深圳灣一號的夥伴們應該明白了,房子太大也是可以輕鬆澆花的。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559354/viewspace-2690392/,如需轉載,請註明出處,否則將追究法律責任。

相關文章