内容简介:作者:iotzheng,腾讯TEG平台开发工程师去年7月的时候,公司办了一场王者荣耀大赛,我和同事们也报名参加了。首局比赛就给我们泼了冷水,“深圳湾一号业主”无情摧残了“祖国的花朵”。
作者:iotzheng,腾讯TEG平台开发工程师 (江湖人称IoT小能手)
前言
去年7月的时候,公司办了一场王者荣耀大赛,我和同事们也报名参加了。首局比赛就给我们泼了冷水,“深圳湾一号业主”无情摧残了“祖国的花朵”。
作为“祖国的花朵”队的替补射手,我心如刀割。
“为什么这样对祖国的花朵?你们平常不种花的吗?”
“没办法啊,你知道深圳湾一号这种房子很大的,每天浇花得走好久。”
“哼!总有一天我会让你们明白!”
小能手当时就下了决心,必须要让“深圳湾一号业主”明白,要让他们明白,房子再大也是可以轻松浇花的!
没过几天,小能手就基于腾讯云物联网开发平台做出来一个浇花器,随时随地打开微信小程序就可以查看盆栽的土壤情况,并且进行远程浇花。这样,长期出差的朋友,以及阳台路程达10分钟的业主们,都得以轻松呵护自己的花花草草。
这篇文章梳理了当时的方案设计和实现,给朋友们做个参考。
1 方案简介
1.1 总体方案
端侧通过 TencentOS tiny 定制 EVB_MX 开发板外挂一个湿度传感器和水泵,通过 LoRaWAN 模组及网关与腾讯云物联网开发平台进行通信,应用层使用微信小程序来查看湿度和控制水泵浇水。
总体系统架构先放这边,接下来具体说说。
1.2 关于节点功能的考虑
小米曾经出了一款“花花草草检测仪”,可以检测光照、酸碱度、温湿度,采集数据指导小白用户如何更好地种花。这个产品是很好,但是它终于是单向的,只能检测,不能输出,就是说你看到小花快渴死了,但仍做不了什么。
所以小能手希望做一个能远程浇花的设备,不如就叫它“花花草草守护仪”。
另外结合网上热心网友的反馈,我决定砍掉光照、酸碱度、温度这几个非刚需的传感器,采用湿度传感器长期监控土壤的情况。
1.3 关于联网方式的考虑
深圳湾一号的套均建筑面积得有三四百平了吧,这要是用普通的 WiFi,业主们肯定还是会受到覆盖不足的困扰。贴心的小能手使用了目前物联网领域最火的技术 LoRa,低功耗远距离,真是别墅物联网应用的不二之选。
2 详细设计方案及实现
有了上面的构思之后,接下来描述详细设计方案及相应的实现。
2.1 浇花器硬件设计
硬件直接采用腾讯云物联网 TencentOS tiny EVB_MX 开发板,自带瑞兴恒方的 LoRa 模组。外设部分,从网上花了 13 块钱购买了水泵和土壤湿度采集器。其中水泵只需要一个IO操作即可,湿度采集器可使用AD采集。
硬件连接部分有个要 注意的,在电源部 分,水泵这种大功率设备如果直接接到开发板会引起电源波动,会影响 LoRa 射频的信号接收,因此我是单独给水泵再供电5V。
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 成果展示
再添加一个动图。
至此,相应深圳湾一号的伙伴们应该明白了,房子太大也是可以轻松浇花的。
怎么,只看文章觉得不过瘾?扫描下方二维码, 看 程序员 的浇花小视频
腾讯技术课直播预告:
4月30日(今天)晚上8点-9点
以上所述就是小编给大家介绍的《程序员黑科技 | 用13块钱DIY微信小程序浇花神器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithm Analysis in Java
Mark A. Weiss / Pearson / 2011-11-18 / GBP 129.99
Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course wa......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!