首页 > 其他分享 >基于ESP32+arduino+platformIO驱动小米模组接入米家app(以温湿度传感器为例)

基于ESP32+arduino+platformIO驱动小米模组接入米家app(以温湿度传感器为例)

时间:2024-06-08 19:58:02浏览次数:26  
标签:platformIO String arduino 温湿度 IoT IA1 include data E53

1. 选择开发板以及开发环境

1.ESP32-C3-DevKitC-02作为主控(以下称为ESP32模块)

相关文档:ESP32-C3-DevKitC-02 - ESP32-C3 - — ESP-IDF 编程指南 latest 文档icon-default.png?t=N7T8https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitc-02.html

2.小米IoT的MHCWB6G-B模块(以下称为小米IOT模块)

3.小熊派的E53_IA1扩展板(以下称为扩展板)

相关文档:E53原理图icon-default.png?t=N7T8https://gitee.com/bearpi/bearpi-iot_std/raw/master/docs/hardware/E53%E6%89%A9%E5%B1%95%E6%9D%BF%E8%B5%84%E6%96%99/E53_IA1_%E6%99%BA%E6%85%A7%E5%86%9C%E4%B8%9A/%E5%8E%9F%E7%90%86%E5%9B%BE/E53_IA1.pdf

4.基于VSCode的platformio开发

5.开启小米IoT开发者平台的开发者权限以及米家app

6.小米IoT平台链接:小米IoT开发者平台icon-default.png?t=N7T8https://iot.mi.com/

2.在小米IoT平台中创建对应产品

点击确定

2.配置产品信息

小米IoT平台为我们创建了一个用于温湿度采集的扩展程序,无需编写

点击固件开发,编辑固件设置

选择对应型号

点开产品基本信息,查看对应model以及pid

3.编写代码

库的选择和下载

在ini文件中添加配置信息如下

upload_speed = 921600
lib_deps=
    robtillaart/SHT31 @ ^0.4.0
    claws/BH1750 @ ^1.3.0

建立IOT.cpp文件,代码如下

#include<IOT.h>
#include <HardwareSerial.h>
#include <string.h>
extern HardwareSerial SerialIot;
String rpy = "" ;


String model="model *******";//产品model,替换掉*******
String pid="ble_config set ***** 0001";//产品pid替换掉*****
String mcu_version="mcu_version 0001";

/*函数名称: Mi_Attach
 *说明: 小米模块入网
 *参数: 无
 *返回值:无
 */
void Mi_Attach(void){
  SerialIot.println("get_down");
  delay(20);
  SendCmdTomi_IoT("set_log_level 0","ok");
  delay(20);
  SendCmdTomi_IoT(model,"ok");
  delay(20);
  SendCmdTomi_IoT(pid,"ok");
  delay(20);
  SendCmdTomi_IoT(mcu_version,"ok");
  delay(20);
}


/*函数名称: Mi_iic_Pub
 *说明: 上报温湿度数据
 *参数: 
 *返回值:无
 */
void Mi_iic_Pub(Data data)
{
  String temp = String(data.temp,2);
  String hum = String(data.hum, 2);
  hum = "properties_changed 2 2 "+ hum;
  temp = "properties_changed 2 1 "+ temp;
  SendCmdTomi_IoT(hum,"ok");
  SendCmdTomi_IoT(temp,"ok");
}




/*函数名称: SendCmdToNB_IoT
 *说明: esp32向wifi模组发送指令
 *参数: data: 要发送的指令  res:期望mi-IoT模组返回的消息
 *返回值:无
 */
void SendCmdTomi_IoT(String data, const char *res)
{
  Serial.print("esp: ");
  Serial.println(data);
  SerialIot.println(data); // 向SerialIoT串口发送数据
  int i = 0;
  rpy = "";
  while (SerialIot.available())
  {
    rpy = SerialIot.readString(); // 读取SerialIot串口缓存数组内的数据保存到rpy中

    if (rpy.indexOf(res) >= 0) // 在rpy中查找是否存在与res相同的内容,若找到,则返回字符串所在的位置
    {
      Serial.print("IoT: ");
      Serial.println(rpy); // 打印获取到的回复信息
      break;
    }
    else
    {
      Serial.print("error : ");
      Serial.println(rpy);
      delay(200);
      SerialIot.println(data);

    }
    delay(10);
    i++;
    if (i > 5)
      break;
  }
}

IOT.h文件,如下

#ifndef IOT_H
#define IOT_H

#include <Arduino.h>
#include<E53_IA1.h>


//定义esp32与小米模组相连的引脚
#define PIN_RX 8
#define PIN_TX 9

void SendCmdTomi_IoT(String data, const char *res);

#endif

E53_IA1.cpp文件如下

#include "E53_IA1.h"

/*函数名称: ReadData
*说明: 读取E53_IA1的温度、湿度和光照数据
*参数: 无
*返回值:包含三个数据的结构体Data
*/
Data ReadData(){
    //获取光照强度
    float lux = lightMeter.readLightLevel();
    //获取温湿度
    sht30.read();     
    float temperature = sht30.getTemperature();
    float humidity = sht30.getHumidity();
    Data data;
    data.hum = humidity;
    data.temp = temperature;
    data.light = lux;
    return data;
}

E53_IA1.h如下

#ifndef E53_IA1_H
#define E53_IA1_H

#include <BH1750.h>
#include <Wire.h>
#include "SHT31.h"

//自定义IIC的引脚
#define I2C_SDA_PIN 2
#define I2C_SCL_PIN 3



// 定义 E53_IA1 模块的 I2C 地址
#define SHT31_ADDRESS   0x44
SHT31 sht30;
BH1750 lightMeter(0x23);

uint32_t start;
uint32_t stop;

//E53_IA1的属性名称
const char* device1 = "light";
const char* device2 = "temp";
const char* device3 = "hum";

//E53_IA1的温湿度和光照数据,结构体类型
struct Data{
    float temp;
    float hum;
    float light;
};

Data ReadData();
 
#endif

main.cpp如下 

#include <Arduino.h>
#include<IOT.cpp>
#include<E53_IA1.cpp>
HardwareSerial SerialIot(1);

void setup() {
  Serial.begin(115200);//初始化用于查看调试信息的串口
  SerialIot.begin(115200, SERIAL_8N1, PIN_RX,PIN_TX);//初始化与小米iot模块连接的串口
  Mi_Attach();
  // 开启与智慧农业板块相连的I2C引脚
  Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
  sht30.begin(I2C_SDA_PIN, I2C_SCL_PIN);
  if (lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE))
  {
    Serial.println(F("BH1750 Advanced begin"));
  }
  else
  {
    Serial.println(F("Error initialising BH1750"));
  }
  uint16_t stat = sht30.readStatus();

}

void loop() {
  Data data = ReadData();
  Mi_iic_Pub(data);
  delay(5000);
}

以下为扩展板的原理图

演示

在米家app添加设备,通过蓝牙配网即可查看温湿度

标签:platformIO,String,arduino,温湿度,IoT,IA1,include,data,E53
From: https://blog.csdn.net/sztublzs/article/details/139537013

相关文章

  • Arduino UNO和Nano的区别
    ArduinoUNO和ArduinoNANO的区别ATmega328pUNO对于用过Arduino开发板的小伙伴来说应该是比较熟悉的了,主要说说NANO,UNO和NANO控制芯片同样用的ATmega328p,不同的是芯片封装不同,UNO是DIP28封装NANO是TQFP32封装(NANO比UNO多了4个引脚出来)图Arduino Uno图Arduino N......
  • 全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯
     资料下载地址:全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯这是旧版退役拆解了新版 与电路图所示共设置4个按键短按开关台灯加减键调光长按进入菜单1.台灯加入PCAPWM调光STC12C5A60S2的PCAPWM非常好用设置简单无极调节......
  • DHT11温湿度模块的简单使用与代码(江科大代码风格)
    目录模块接线测量范围模块代码DTH11.hDHT11.c模块接线测量范围相对湿度:5%~95%RH温度:-20~60℃模块代码DTH11.h#ifndef_DHT11_H_#define_DHT11_H_#include"stm32f10x.h"//Deviceheader//上电后等待1秒才调用函数......
  • 洁净房计量校准中,温湿度如何校准?需要注意哪些规范流程?
    洁净房是许多生产厂商,或者实验室常用的实验生产空间。比如常见的无尘车间,又或者是无尘实验室等等,它们都有相同的特点,那就是洁净无尘,基本上可以排除空间里尘埃微粒的影响,从而可以更好的对洁净房中的静电、温度、湿度等一系列数据进行规范控制,那么如果需要在洁净房中进行计量校准......
  • Arduino实现温湿度传感器以及数据上传到云(乐维互联)
    0准备材料0.1ESP-01S引脚及定义官方定义:序号pin功能1GND地线2IO0/GPIO0工作模式选择:①悬空:FlashBoot,工作模式②下拉:UARTDownLoad下载模式3IO2/GPIO2通用IO4RX/RXD数据接收端5TX/TXD谁发送端63V3/VCC3.3V,模块供电7RST1)外......
  • ESP8266模块上传温湿度传感器的数据到云平台(乐为物联)
    ESP8266相关AT指令AT:检测模块是否正常工作,返回“OK”表示正常。AT+RST:重启模块。AT+CWMODE=:设置Wi-Fi模式,可以是以下几种:1:Station模式,连接到一个Wi-Fi网络。2:SoftAP模式,创建一个Wi-Fi热点。3:SoftAP+Station模式,同时作为热点和连接到一个Wi-Fi网络。AT+CWJAP="",""......
  • Arduino开发环境配置
    日期:2024年5月28日我的系统环境:Windows10ArduinoIDE:2.3.2ESP32SDK:esp32_package_2.0.12_arduinome一ArduinoIDE安装1软件下载根据自己的系统环境,在Arduino网站下载ArduinoIDE安装包,以Windows10为例:点击对应版本下载(截至2024年5月28日,新手建议还是下载稳定版:1.8......
  • 基于51单片机家庭烟雾红外温湿度报警设计
    **单片机设计介绍,基于51单片机家庭烟雾红外温湿度报警设计文章目录一概要二、功能设计设计思路三、软件设计原理图五、程序六、文章目录一概要  基于51单片机家庭烟雾红外温湿度报警设计概要如下:一、设计背景与目的本设计旨在构建一个能够实时监测家庭......
  • 基于arduino uno的DHT11温湿度传感器的使用
    安装DHT库由于arduinoIDE本身无法直接下载DHT库,在网上寻找第三方库,链接是gitee的,国内能直接访问https://gitcode.com/markruys/arduino-DHT下载为zip包后导入IDE中,具体步骤:项目->管理库->添加.zip库->选择下载的zip包使用示例按照下面图示使用即可出于某种原因如果无法使......
  • Arduino下载与安装(Windows 10)
    Arduino下载与安装(Windows10)官网下载安装打开官网,点击`SOFTWARE`,进入到软件下载界面,选择`Windows`选择JUSTDOWNLOAD在弹出的界面中,填入电子邮件地址,勾选`PrivacyPolicy`,点击`JUSTDOWNLOAD`即可下载完成后,,exe文件大小为143MB,版本为arduino-ide_2.3.2......