1.项目描述
本项目采用FireBeetle ESP32-E开发板,与dfrobot生产的SEN0289晃动传感器,以及第三方公司生产的dht11数字温湿度传感器,制作了一套远程监控系统,通过ESP32-E控制器,采集目标物体的晃动情况,以及周围环境的温湿度信息,通过WiFi上传至阿里云服务器,使用户能够远程实时监测其状态。
项目所用FireBeetle ESP32-E是一款基于ESP-WROOM-32E双核芯片的主控板,它专为IoT设计。支持WIFI和蓝牙双模通信并具有体积小巧、超低功耗、板载充电电路、接口易用等特性。可灵活的用于家庭物联网改装、工业物联网改装、可穿戴设备等等。FireBeetle ESP32-E深度支持ArduinoIDE编程,并且即将支持Scratch图形化编程及MicroPython编程。邮票孔的设计,让它可以方便的嵌入你设计的PCB上,大大缩减你的原型开发成本以及原型测试时间。
数字晃动传感器是一款仅对单方向手摇运动敏感的数字传感器。采用弹簧式震动开关,静止时输出高电平,当用户沿指定方向用力晃动一次,模块输出一个低电平脉冲,板载指示灯同时闪亮。具有较强的抗冲击干扰能力。
2.各功能代码片段及说明
设备上电后,会通过wifi自动连接至阿里云服务器,此后,每隔5s将环境温湿度数据上传至服务器,当设备出现晃动时,会将晃动数据以事件方式上报至服务器。在服务器端可下发控制命令,对设备的led灯进行开关操作。
连接阿里云:
void ConnectAliyun()
{
    while (!client.connected())
    {
        Serial.print("Attempting MQTT connection...");
        /*根据自动计算的用户名和密码连接到Alinyun的设备,不需要更改*/
        if (client.connect(myAliyun.client_id, myAliyun.username, myAliyun.password))
        {
            Serial.println("connected");
            client.subscribe(subTopic);
        }
        else
        {
            Serial.print("failed, rc=");
            Serial.print(client.state());
            Serial.println(" try again in 5 seconds");
            delay(5000);
        }
    }
}
物体晃动检测:
当设备出现晃动时,通过事件方式,上报至服务器。
void Send_shake_state_to_ail()
{
    static uint32_t cnt = 0;
    if (stateChangeFlag)
    {
        stateChangeFlag = false;
        Serial.println(stateFlag);
        client.publish(eventTopic,("{\"id\":"+ClientId+",\"params\":{\""+ShakeIdentifier+"\":"+stateFlag+"},\"method\":\"thing.event.property.post\"}").c_str());
    }
}
温湿度数据上传:
设备每隔5s,将环境温湿度信息上报至服务器。
void Send_temp_humi_to_ail()
{
    static uint32_t cnt = 0;
    if (millis() - cnt > 5000)
    {
        cnt = millis();
        DHT.read(DHT11_PIN);
        Serial.print("DHT.temperature=");
        Serial.println(DHT.temperature);
        Serial.print("DHT.humidity=");
        Serial.println(DHT.humidity);
        client.publish(pubTopic, ("{\"id\":" + ClientId + ",\"params\":{\"" + TempIdentifier + "\":" + DHT.temperature + ",\"" + HumiIdentifier + "\":" + DHT.humidity + "},\"method\":\"thing.event.property.post\"}").c_str());
    }
}
控制命令下发执行:
可在服务器端,远程下发控制命令,对设备的led进行开关操作。
void callback(char *topic, byte *payload, unsigned int len)
{
    Serial.print("Recevice [");
    Serial.print(topic);
    Serial.print("] ");
    for (int i = 0; i < len; i++)
    {
        Serial.print((char)payload[i]);
    }
    Serial.println();
    StaticJsonBuffer<300> jsonBuffer;
    JsonObject &root = jsonBuffer.parseObject((const char *)payload);
    if (!root.success())
    {
        Serial.println("parseObject() failed");
        return;
    }
    const uint16_t LightStatus = root["params"][Identifier];
    if (LightStatus == 1)
    {
        openLight();
    }
    else
    {
        closeLight();
    }
    String tempMseg = "{\"id\":" + ClientId + ",\"params\":{\"" + Identifier + "\":" + (String)LightStatus + "},\"method\":\"thing.event.property.post\"}";
    char sendMseg[tempMseg.length()];
    strcpy(sendMseg, tempMseg.c_str());
    client.publish(pubTopic, sendMseg);
}3.功能展示及说明
接通设备电源后,ESP32通过设置的wifi,自动连接至阿里云,在控制端可以看到,设备的上线信息。
设备间隔5s,自动上传环境温湿度信息,通过阿里云控制端可实时查看设备的上传数据。
             
当设备出现晃动时,会将晃动数据以事件方式上报至阿里云,同时在阿里云控制端口可查看设备上报的事件信息。
可以通过阿里云控制端的在线调试功能,对设备led灯进行远程控制
开灯操作:
关灯操作:
4.对本活动的心得体会
非常感谢此次活动的举办方,虽然第一次使用ESP32控制器,但是借助arduino强大的开发环境,能够非常方便的对其进行开发,各种库用起来也非常方便,通过活动,熟悉了ESP32的开发流程,以及阿里云的使用流程,希望活动能够越办越好。
