ESP32 Arduino 通过MQTT上云阿里云控制的物联网应用开发


简介

ESP32通过阿里云IoT平台进行物联网通信
实现温湿度采集、AD采样、继电器控制
阈值温度监测:微信报警、钉钉报警、QQ报警
APP/WEB可视化控制,自建API控制

WEB 可视化页面

预览地址:iot.suroy.cn

APP

实物展示

通知提醒


Arduino 开发 ESP32 需要用到的库:

PubSubClient : 发送和接收MQTT消息
ArduinoJson : Json字符串转换库
AliyunMqttArduino: 阿里云相关

初始化之后一定需要做

否则将会导致设备无法连上阿里云IoT平台

Arduino代码

报警业务逻辑

通过“设备触发” 含阿里云官方钉钉报警、及自建微信、QQ报警

# -*- coding: UTF-8 -*-

# @autho Suroy
# @param {Object} payload 上一节点的输出
# @param {Object} node 指定某个节点的输出
# @param {Object} query 第一个节点的输出
# @param {Object} context  { appKey, appSecret }

#默认格式
def main(payload, node, query, context):
    print 'payload =', payload
    print 'node =', node
    print 'query =', query
    print 'context =', context
    
    #触发节点
    nodeDevice = node.get('node_ab6ca5d0') #node.get().get('pageNum')
    
    #默认格式
    cur_t=nodeDevice["props"]["IndoorTemperature"]["value"] if nodeDevice["props"]["IndoorTemperature"] else 0
    # CurrentTemperature换成自己的属性标识符,cur_t自己定义的变量
    
    #取得报警温度值
    for v in payload["data"]:
        print(v)
        if v["attribute"] == "tempAlarm":
            tempAlarmValue = v["value"]
            break
    
    #风扇开关,自定义布尔变量
    power_s=0
    ding_msg="Hi, Suroy"
    
    #字符串变量,自定义
    if(cur_t>tempAlarmValue):
        power_s=1
        ding_msg="当前温度"+str(cur_t)+"打开空调"
    ding_msg = "温度是{{node.node_ab6ca5d0.props.IndoorTemperature.value}}°c,湿度是{{node.node_ab6ca5d0.props.RoomHumidity.value}}%,模拟采样值是{{node.node_ab6ca5d0.props.analog.value}}"
    payload["p_s"]=power_s
    payload["d_m"]=ding_msg
    return payload

自建API的业务逻辑

通过阿里云IoT的HTTP请求触发,使用自建API将数据转发到云平台实现物联网设备的数据采集及控制。
进一步优化,可以实现AI控制

参考文献:https://www.jianshu.com/p/f0d46324a2c6

关于esp32电灯不亮以及io输出高电平问题

ESP8266使用Arduino ide通过MQTT协议接入阿里云平台(上传温湿度,甲醛浓度,土壤湿度,超声波等)

声明:Grows towards sunlight |版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - ESP32 Arduino 通过MQTT上云阿里云控制的物联网应用开发


Grows towards sunlight and Carpe Diem