前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【IOT应用创新大赛】基于 EVB_MX_Plus 的盆栽土壤监测

【IOT应用创新大赛】基于 EVB_MX_Plus 的盆栽土壤监测

原创
作者头像
远哥制造
修改2020-05-15 11:06:06
1.5K1
修改2020-05-15 11:06:06
举报
文章被收录于专栏:腾讯云IoT腾讯云IoT

0x00.前言

还记得推上的那张曲线图嘛,越临近deadline效率越高(雾

注:因社区编辑器限制,完整文章详见:【IOT应用创新大赛】基于 EVB_MX_Plus 的盆栽土壤监测

0x01.简介

其实这阵子一直盯着专栏看投稿文章的方向性,印象里上周直至昨天还只有4篇,今天突然就多了数十篇,看完大佬们已经提交的文章,感觉好多都是LoRa相关的

虽然当初比赛申请的时候并不知道RoLa是什么,但是看完大佬们的文章也算是明白了它的基本使用方法吧,传输距离比WiFi远多了可是印象里最深刻的一点了

最后说回自己申请的32板子,虽然是个半内行人但是拿到手也能看出这是一块好板子,拿到手之后真是爱不释手hhh

而且还能脱离数据线仅使用锂电池供电(毕竟主打的低功耗MCU),不过某天晚上测试过一次不到8h就没电了(推测主要原因是OLED的耗电量巨大……即使关闭OLED显示再等到早上起来同样会没电)

0x02.EVB_MX_Plus

配套的联网模块使用ESP8266模组,这个用的再熟悉不过了,也赠送了RoLa模组,但是在公开的覆盖图上并没有看到市内有覆盖,因此暂时仍旧使用前者

另外的拓展E51模块足够使用,也没有额外购买其他型号的(

板子拿到手的那个周末就照着例程成功对接上了,见EVB_MX_Plus 对接腾讯云物联网开发平台,不得不说物联网开发平台是真的方便(除了因自己没看好烧错例程无法对接之外),demo程序可以实现云端控制灯的开关(顺便吐槽下这个灯真是巨亮无比)

然后去看板子上的其他传感器:温、湿、光应有尽有,另外在例程里也看到了DHT11的适配,估计找个PIN接上就也能使用了

作为个人业余开发者,并没有接触过工业(商业)产品的经验。所以觉得应该致力于解决贴近自己现实生活中的需求

对于老生常谈的温湿度监控已经基于NodeMCU+DHT11实现,这里就围绕着另一个「课题」进行方案落地

去年tb上买了一盆文竹,但是因为种种原因(懒)要么是好几天没浇水,要么是一浇就浇多了…… 本来刚拿到手的时候是绿绿的,到了现在已经变黄了,惨……

因此决定监测植物的湿度,于是立即去tb购买传感器等相关配件

虽然确实是用了红包省钱卡5元无门槛红包,但是其实也不是很贵的样子

6.94
6.94

拿到手后首先来看土壤湿度传感器,这个传感器说到底还是国内的厂子自己生产的,引出的两根线接到另外一块比较器板子上

型号选的是4 PIN的,即除了输入的电源和地之外,输出既有A也有D,数字量D其实是依赖于LM358来比较电压大小,因此可以手动调节板子上的滑动变阻器来改变开始输出的阈值

同时板子上除了电源有LED指示之外,另一个LED正是和D口状态同步的,这里毕竟要看数值,因此选择A口怼到开发板的ADC1上来测量其实际电压

电压拿到手之后还需要映射到湿度范围上,虽然实际关系可能不是近似于线性,但是这里还是当做线性处理了

相对湿度的计算方法很简单,放空气中是4V0%)左右,插水里面是1V100%)左右

即:soil_humi = (4000 - adValue) / 30;(请无视混用了下划线驼峰命名法

然后就是小水泵了,这玩楞直接插5V流速实在是太快了(主要还是花盆太小了),而且不清楚能不能加上负反馈调节(学过的《自动控制原理》还略有印象)

1m长的水管拿到手发现巨长,于是拿小刀割出20cm,足够使用了

回头去翻商品详情发现了这么一段话,没错绝对湿度值并不适用于土壤

这水泵电流120mA,直接拿单片机GPIO口是驱动不了的,可以选择外接一个三极管搞定,并且不能长时间工作因为会影响到板子的供电?实测不大一会mqtt通信就报错断开了,串口输出还能看到路径乱码???

目前的解决方法是,每次只接通3s之后就断开,这个水量也足够一次短暂的补充了(花盆小

最后的水位传感器,是准备放在储水容器之中来测量剩余可用水量,目前并未实装(原因不仅在于需要寻找空余的GPIO口,更在于又需要找5V供电……

虽然买了一堆传感器可以直接把状态数据推到云上,但是每多一个传感器就需要多一处供电啊(

当然了,这个同样是输出模拟值,需要从GPIO口进行ADC采集来读取其电压值来判定水位线,基本思路是一样的

0x03.代码

gh

说到底还是C51的基础不够,搞一个编译pass都得排半天的错

编译通过!
编译通过!

0x04.腾讯云物联网开发平台

来上云吧,进入控制台,印象里早在公测的时候就申请到了名额

比较实用的还有数据开发功能,可以实现自己的逻辑

输出部分的APP 推送暂时还用不上,因此选择公众号推送方式,即报警消息通过微信服务号推送给自己

处理部分的数据过滤其实就是判定条件,比如湿度低于70%触发等等

输入部分的设备数据即传感器读取的湿度数据,设备事件即通过event上报的事件,同理设备状态也是类似的(都是在读传感器嘛

EVB_MX_Plus出厂的开关位置控制了USB接口插到PC上为串口使用由CH340驱动,烧录是用了另外的接口因此互不影响(这板子设计的真是妙啊

另外,如果接上ST-Link的话,就无法使用物理开关控制断电了,它会强制供电,烧录完成之后可以按下板子上的复位键来重启,就不需要拔插ST-Link

而只接USB线就可以使用物理开关,并且会给板子上的锂电池充电

0x05.连线图

完整图
完整图

0x06.小程序

源码自带小程序端,照着模板不到半小时就能预览出来(顺便发现代码里明文SECRET_IDSECRET_KEY……这个还是得拿CAM单独建个只读API密钥

v0.2
v0.2

也可以使用腾讯连连,从官方控制台配好UI之后直接扫码就可以使用了,非常方便

这里的构想是通过数据同步将数据存储至私有库中,并使用Grafana之类的可视化工具查看

数据同步即将设备通过MQTT上报的数据以HTTP形式发送至自己的云主机上,通过Flask开一个接口接收并存储至MySQL就搞定了

此构想其他项目已实现,暂未此处已实装

示例Flask代码,上传接口未做来源验证,后期可以自行加个token做双方校验

代码语言:txt
复制
@api.route('/IOT/flower', methods=['GET', 'POST'])
def IOT_flower():
    if 'upload' in request.args:
        data = json.loads(request.get_data(as_text=True))
        seq = data.get('seq')
        timestamp = data.get('timestamp')
        topic = data.get('topic')
        productid = data.get('productid')
        devicename = data.get('devicename')
        brightness = data.get('payload').get('params').get('brightness')
        humidity = data.get('payload').get('params').get('humidity')
        temperature = data.get('payload').get('params').get('temperature')
        soil_humi = data.get('payload').get('params').get('soil_humi')
        light_switch = data.get('payload').get('params').get('light_switch')
        motor_switch = data.get('payload').get('params').get('motor_switch')
        return upload(seq, timestamp, topic, productid, devicename, brightness, humidity, temperature, soil_humi,
                      light_switch, motor_switch)
    elif 'devicename' in request.args:
        devicename = request.args['devicename']
        if devicename:
            return get_multidata_from_mysql(devicename)
        else:
            return bad_request('参数值为空')
    else:
        return bad_request('非法参数')

即可用https://lab.yuangezhizao.cn/api/v0.0.1/IOT/flower?devicename=dev001接口进行访问

Grafana里选好数据源就也可以进行可视化了

0x08.HomeAssistant

这里的构想是接入HomeAssistant,可使用其进行查看,并配置HomeKit对接IOS家庭,即可用Siri语音控制

方案一:结合上面的数据同步,数据就触手可及了,自有源也不必担心消耗过多的请求量

HomeAssistant里有一种sensor平台是command_line,即把执行shell获取到的数据为数据来源,直接写个读MySQLshellok

有这个command_line就可以任意对接了,爽到(

方案二:连接到云上MQTT……

此构想其他项目已实现,暂未此处已实装

代码语言:txt
复制
sensor:
  - platform: command_line
    name: soil_humi
    command: python3 -c "import requests; print(requests.get('https://lab.yuangezhizao.cn/api/v0.0.1/IOT/flower?devicename=dev001').json()['data']['soil_humi'])"
    unit_of_measurement: "%"

  - platform: command_line
    name: yuangezhizao's room temperature
    command: python3 -c "import requests; print(requests.get('https://lab.yuangezhizao.cn/api/v0.0.1/IOT/flower?devicename=dev001').json()['data']['temperature'])"
    unit_of_measurement: "°C"

  - platform: command_line
    name: yuangezhizao's room humidity
    command: python3 -c "import requests; print(requests.get('https://lab.yuangezhizao.cn/api/v0.0.1/IOT/flower?devicename=dev001').json()['data']['humidity'])"
    unit_of_measurement: "%"

  - platform: command_line
    name: brightness
    command: python3 -c "import requests; print(requests.get('https://lab.yuangezhizao.cn/api/v0.0.1/IOT/flower?devicename=dev001').json()['data']['brightness'])"
    unit_of_measurement: "lx"

0x09.HomeKit

打开家庭可以同步看到传感器的状态,这里有个坑就是温度传感器可以显示,但是湿度不行,解决方法是自定义属性

代码语言:txt
复制
sensor.soil_humi:
  friendly_name: 土壤湿度
  device_class: humidity

sensor.brightness:
  friendly_name: 光照强度

sensor.yuangezhizao_s_room_humidity_2:
  friendly_name: 房间湿度
  device_class: humidity

sensor.yuangezhizao_s_room_temperature_2:
  friendly_name: 房间温度

也可以召唤Siri

0x09.后记

总的来说收获还是巨大的(wx群里都是巨佬,瑟瑟发抖……

未完待续……

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00.前言
  • 0x01.简介
  • 0x02.EVB_MX_Plus
  • 0x03.代码
  • 0x04.腾讯云物联网开发平台
  • 0x05.连线图
  • 0x06.小程序
  • 0x08.HomeAssistant
  • 0x09.HomeKit
  • 0x09.后记
相关产品与服务
物联网开发平台
腾讯云物联网开发平台(IoT Explorer)是面向智慧生活与产业物联应用的一站式物联网PaaS平台,为各行业用户提供一站式设备智能化服务。平台提供海量设备连接与消息通信能力,基于腾讯连连小程序应用开发能力、音视频能力及AI增值服务,聚合腾讯生态内容能力。提升传统行业设备智能化的效率,降低用户的开发运维成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档