使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

这篇具有很好参考价值的文章主要介绍了使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

        本篇博客记录一下以arduino IDE来开发一下ESP8266NodeMCU,实现用DHT11进行温湿度检测,并且上传新版的onenet官网;我在实现这个小项目的时候,发现网上资料有关onenet的资料都是旧版的,这就有点难受了,本着开源的精神,这篇博客就来弥补一下这方面资料的缺失。

前期准备工作:

硬件方面:

        1、ESP8266NodeMCU

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         2、DHT11传感器

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         3、一根USB转micoUSB线,杜邦线若干

在新版Onenet上创建一个设备

        1、首先我们要先注册一个onenet账号,这里我就不再给大家写具体步骤了。

        2、注册完之后,点击箭头所指,进入开发者中心

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         3、继续点击费用中心

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         4、接下来会弹出一个崭新的界面使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

        5、将鼠标悬停在左侧箭头所指区域,会展开以下界面 

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

        6、选择多协议接入

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         7、我们点击添加产品

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         8、根据箭头和方框提示来写一些必要的信息,这个是可以随便写的,只要我们确定联网方式是wifi、接入协议是MQTT(旧版)这几个即可。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         9、我们点击立刻添加设备

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

        10、点击添加设备

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         11、会给我们弹出一个新的界面

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         12、这里也是可以随便写的,写完必选的选项,点击添加。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         13、添加完成之后,我们就可以看到一个新的界面,在这个界面里,设备一开始离线的,这是正常的,此外,我们的设备ID需要记录一下,后续我们需要来根据设备ID来修改一下自己的代码。使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         14、我们点击这个详情,可以看到我们总的一个设备情况

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

        15、进入新界面后,我们点击添加APIkey

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         16、这个APIKey是可以由我们自己来设定,这里我就随便写写了,这个官网会给我们生成一个对应的APIKey码,我这里就是随便写的,只要凑够16个就可以。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         17、点击提交之后,就会给我们生成一个新的APIKey,这个也要记住,后续写代码也是要记住的。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         19、我们点击产品概况,来查看一下我们的产品ID,这个也要记录一下,因为后续写代码我们也要用到的。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         到这一步为止,我们的onenet设备就算是配置好了,接下来就是在arduinoIDE上添加一个ESP8266设备了。

arduinoIDE添加ESP8266

        如果一开始我们选择使用arduino IDE来编辑ESP8266是需要在编辑器上进行一些操作的

        1、打开菜单栏的文件->首选项,将下面的网址复制到指定位置

http://arduino.esp8266.com/stable/package_esp8266com_index.json

      使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         2、然后再打开工具,将鼠标悬停在开发板那个位置,会出现开发板管理,如果没有出现的话,也只是说明arduino版本不同罢了,这一点没啥问题的,如图所示

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         3、我们点击开发板管理,弹出以下界面,我们在箭头所指区域搜索ESP8266,然后找到一个合适的版本进行下载。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         4、开始下载。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         5、这过程很容易出错,出错了也不要紧,一旦报错,那就多下载几次,一定要保证网络的通畅,否则会下载不了。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

        6、 下载完成后,我们需要重启一下我们的IDE才能在开发板的位置发现我们的下载下来的开发板,这里一定要选择我鼠标悬停的开发板,我们的ESP8266NodeMCU对应的开发板就是NodeMCU 1.0,这里千万不能选错,否则很容易出现一些错误。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

 安装CP2102的驱动

       我们一开始将ESP8266NodeMCU与我们的电脑连接的话,是没办法识别到我们的串口的,也就是说,一开始烧录代码是烧录不进去的。大家如果插上ESP8266NodeMCU之后,电脑的设备管理器是会出现下面这个界面。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

        这里我是之前安装过CP2102的驱动,一开始我看错了以为这个ESP8266NodeMCU板载的是CH340驱动呢,后来仔细看了一下不是,我们还需要安装一个CP2102的驱动,这里我也给大家找了一款合适的驱动,我放在了百度网盘里面CP2102驱动   提取码是:brqt

        下载下来之后,我们根据电脑的类型来选择对应的驱动。64位的话,我们就选择X64,如果是32位的话,我们选择X86。使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         双击运行即可。直接点击下一步,傻瓜式安装。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         安装完之后,我们就可以发现串口被识别到了。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网       至此,我们的前期准备工作算是完成了。

硬件引脚连接

        

DHT11管脚 ESP8266NODEMCU管脚
GND GND
VCC 3V3
DATA D6

代码部分:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <Ticker.h>
#include <dht11.h>

#define WIFI_DEBUG 0          //1:使用一键配网,其它值则使用默认无线账号密码
#define DHT11PIN 12           //设置DHT引脚为Pin 12
#define ONENET_DISCONNECTED 1 //已经断开
#define ONENET_CONNECTED 2    //已经连接上
#define ONENET_RECONNECT 3    //重连成功
#define VER  "ESP8266_MQTT_V1.0"  //版本号

const char* ssid = "********";//你的wifi账号
const char* password = "********";//wifi密码


/*OneNet*/
PubSubClient mqttClient;
const char* mqttServer = "183.230.40.39";//mqtt服务器
const uint16_t mqttPort = 6002;       //端口号
#define onenet_productId   "******" //产品ID
#define onenet_deviceId    "**********" //设备ID
#define onenet_apiKey      "******************" //API_KEY

int state;
Ticker delayTimer;
WiFiClient espClient;
dht11 DHT11;

/* 延时N秒 */
void delayNs(uint8_t m){
  for(uint8_t index = 0;index<m;index ++){
    delay(1000);
    ESP.wdtFeed();
  }
}


/* 延时重启 */
void delayRestart(float t) {
  Serial.print("Restart after ");
  Serial.print(t);
  Serial.println("s");
  delayTimer.attach(t, []() {
    Serial.println("\r\nRestart now!");
    ESP.restart();
  });
}

/* 自动连接 */
bool autoConfig()
{
  WiFi.begin();
  for (int i = 0; i < 20; i++)
  {
    if (WiFi.status() == WL_CONNECTED)
    {
      Serial.println("AutoConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.printDiag(Serial);
      return true;
    }
    else
    {
      Serial.print("AutoConfig Waiting......");
      Serial.println(WiFi.status());
      delay(1000);
    }
  }
  Serial.println("AutoConfig Faild!" );
  return false;
}

/* 一键配网 */
void smartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig");
  WiFi.beginSmartConfig();
  while (1)
  {
    Serial.print(".");
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    if (WiFi.smartConfigDone())
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.setAutoConnect(true);  // 设置自动连接
      break;
    }
    delay(1000); // 这个地方一定要加延时,否则极易崩溃重启
  }
}

/* 连接OneNet */
int connectToOneNetMqtt(){
    int cnt = 0;
    while(!mqttClient.connected()){
       ESP.wdtFeed();
       cnt++;
       Serial.println("Connect to OneNet MQTT...");
       
       if (mqttClient.connect(onenet_deviceId,onenet_productId,onenet_apiKey)) {
             Serial.println("connect success!");
             return ONENET_RECONNECT;
        } else {
             Serial.print("connect fail!");
             Serial.println(" try again in 5 seconds");
             delayNs(5);
        }
        if(cnt >=10){
          //只做10次连接到OneNet,连接不上重启8266
          cnt = 0;
          delayRestart(1);
        }
    }
    return ONENET_CONNECTED;
}

/* 云端下发 */
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  if ((char)payload[0] == '1') {
    digitalWrite(LED_BUILTIN, LOW);
  } else {
    digitalWrite(LED_BUILTIN, HIGH);
  }
}

/* 发布温度信息 */
void Temp_pubMQTTmsg(uint32_t data){
   long lastMsg = 0;

   char msg[50];
   char tmp[28];
   char d[3];
   snprintf(tmp,sizeof(tmp),"{\"Temp\":%d}",data);
   uint16_t streamLen= strlen(tmp);

   d[0]='\x03';
   d[1] = (streamLen >> 8);
   d[2] = (streamLen & 0xFF);
   snprintf(msg,sizeof(msg),"%c%c%c%s",d[0],d[1],d[2],tmp);
   mqttClient.publish("$dp", (uint8_t*)msg,streamLen+3,false);
}
/* 发布湿度信息 */
void Humi_pubMQTTmsg(uint32_t data){
   long lastMsg = 0;

   char msg[50];
   char tmp[28];
   char d[3];
   snprintf(tmp,sizeof(tmp),"{\"Humi\":%d}",data);
   uint16_t streamLen= strlen(tmp);

   d[0]='\x03';
   d[1] = (streamLen >> 8);
   d[2] = (streamLen & 0xFF);
   snprintf(msg,sizeof(msg),"%c%c%c%s",d[0],d[1],d[2],tmp);
   mqttClient.publish("$dp", (uint8_t*)msg,streamLen+3,false);
}

/* 初始化系统 */
void initSystem(){
    int cnt = 0;
    Serial.begin (115200);
    Serial.println("\r\n\r\nStart ESP8266 MQTT");
    Serial.print("Firmware Version:");
    Serial.println(VER);
    Serial.print("SDK Version:");
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    Serial.println(ESP.getSdkVersion());
 
    ESP.wdtEnable(5000);
   
    if(WIFI_DEBUG==1)//开启一键配网模式
    {
       if (!autoConfig())
      {
        Serial.println("Start smartConfig");
        smartConfig();
      }
    }
    else
    {
        WiFi.begin(ssid, password);
        while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        cnt++;
        Serial.print(".");
        if(cnt>=40){
          cnt = 0;
          //重启系统
          delayRestart(1);
        }
        }
    }
    Serial.print("WIFI Connect \r\n");
}

/* 初始化ONENET通信 */
void initOneNetMqtt(){
    mqttClient.setServer(mqttServer,mqttPort);
    mqttClient.setClient(espClient);
    mqttClient.setCallback(callback);
}

/* 初始化 */
void setup() {
  initSystem();
  initOneNetMqtt();
}

/* 主函数 */
void loop() {
  ESP.wdtFeed();
  DHT11.read(DHT11PIN);
  state = connectToOneNetMqtt();
  Serial.println(WiFi.status());
  if(state == ONENET_RECONNECT){
     mqttClient.loop();
  }
  else if(state == ONENET_CONNECTED){
     printf("temp:%d \r\n",DHT11.temperature);
     printf("humi:%d \r\n",DHT11.humidity);
     Temp_pubMQTTmsg(DHT11.temperature);
     Humi_pubMQTTmsg(DHT11.humidity);
     mqttClient.loop();
  }
  delay(2000);
}

         这里面大家需要修改的就是我上面给大家提醒要记录下来的产品ID,设备ID,APIkey,以及你自己的手机热点和密码。

        当然,如果大家进行编译的时候,一定要先将开发板选择为ESP8266NodeMCU。然后还是汇报

        而这些库都是可以在官网上找到的,我这里也给大家整理了一下如果没有这些库那该怎么办。

如果没有对应的库,该怎么办

        1、将下面的网址复制到浏览器里

https://www.arduino.cc/reference/en/libraries/

        2、进入如下界面

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         3、在箭头所指的地方搜索缺少的库。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         4、这里我以PubSubClient.h为例,搜索之后,点击第一个

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         5、进入以下界面,这里我是选择了最新的版本,点击之后就会自动下载了。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         6、进入Arduino IDE,点击项目->加载库->添加.zip库。选到刚下载的文件路径,指定文件后就可直接安装,在IDE命令窗中可以看到安装成功提示。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         7、其余几个库也是同样的道理。

进行编译:

        编译完之后是这样的,不是报错。使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

        在烧录之前,我们要先选择刚才我们在设备管理器里看到的那个串口,然后点击工具->端口->选择CP2102对应的那个串口,然后才能进行烧录。

        如果进行烧录操作,会出现下图所示的效果,就说明已经OK了。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         这时候,代码里加入了串口查看部分,我们可以在串口监视器里面看到现在的温度和湿度。我们可以打开串口显示器来查看一下效果。使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

         也可以进入onenet官网看一下效果。

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

 文章来源地址https://www.toymoban.com/news/detail-489721.html

到了这里,关于使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Arduino + ESP8266 NodeMcu(超详细)

            从计算机学院入坑工学院,第一次学习Arduino+ESP8266 NodeMcu( CH340驱动版 )开发板的学习         本着小白上道,才发现各种开源项目和一些包在到处割韭菜,记录一下第一次学习安装遇到的坑 (本次记录所有下载链接和我上传在CSDN上的下载项目全部免费提供

    2023年04月08日
    浏览(47)
  • STM32系列(HAL库)——使用ESP8266-01S物联网模块连接Onenet云平台上报DHT11温湿度

    本篇主要讲解如何使用ESP8266-01S物联网模块连接Onenet云平台,并上报DHT11模块的温湿度数据。本文单片机主控采用STM32F405RGT6,使用其他主控的话基本要求有2个串口,一个串口用于调试使用,另一个用于ESP模块通讯。 1.软件 CubeMX Keil5 串口调试助手 Onenet云平台账户 2.硬件 STM32开

    2024年02月02日
    浏览(72)
  • ESP32 Arduino开发 DHT11传感器

    参考:CSDN博客 打开库管理工具 工具 - 管理库... 查找所需要的程序库 安装 DHT sensor library DHT对象创建的函数需要两个参数,一个是用于获取数据的引脚号,一个是传感器的类型(可选DHT11、DHT21、DHT22)。 所以在创建对象之前,通过宏定义的方式对于所需要的两个参数进行定义

    2024年02月03日
    浏览(39)
  • STM32+ESP8266+DHT11通过MQTT协议连接新版ONENET云平台上传数据

    项目讲解视频 新版 云平台搭建视频演示 单片机代码修改演示视频 APP参数修改 实物演示 前段时间ONENET云平台进行了升级更新,此前平台的多协议接入(包含旧版MQTT、HTTP、EDP、Modbus、TCP透传等)接口已经隐藏,后续应该会下架,为了能够后续继续使用ONENET云平台,就需要学

    2024年02月09日
    浏览(39)
  • STM32F103C8T6+ESP8266WIFI+DHT11模块连接巴法云

    1.MCU:STM32F103C8T6 2.ESP8266:正点原子WIFI模块 3.串口模块:正点原子串口模块 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: ESP8266固件刷写 我用的是安信可的固件,可以在官网上下载。正点

    2023年04月27日
    浏览(64)
  • 【NodeMCU-ESP8266】Arduino环境下建立UDP服务器及WiFiUDP库常用函数详解

    目录 一、UDP协议概述         1、UDP基本概念         2、UDP的主要特点         3、UDP的基本报文格式 ​二、ESP8266官方UDP库相关函数详解 三、建立UDP服务器的一般流程 四、ESP8266官方库 UDP 示例程序演示 五、ESP8266官方库 UDP 程序运行说明         1、将程序编译并

    2024年04月24日
    浏览(38)
  • ESP8266 NodeMCU连接阿里云(从环境搭建到代码实现)

    ESP8266 NodeMCU是一款基于ESP8266芯片的开发板,因其体积小、功耗低、易于编程和扩展等特点,在物联网领域得到了广泛应用。阿里云IoT平台则为开发者提供了稳定可靠的物联网服务,包括设备接入、数据管理、远程控制等功能。本教程将指导你如何将ESP8266 NodeMCU连接到阿里云

    2024年04月16日
    浏览(44)
  • 获取 ESP32/ESP8266 MAC 地址并更改 (Arduino IDE)

    本指南介绍如何使用 Arduino IDE 获取 ESP32 或 ESP8266 开发板的 MAC 地址。我们还展示了如何更改开发板的 MAC 地址。 MAC 地址代表 媒体 访问 控制 地址,它是识别网络上每个设备的硬件唯一标识符。 MAC 地址由六组两位十六进制数字组成,以冒号分隔,例如: 32:AE:A7:04:6D:66 . MAC 地

    2024年02月12日
    浏览(195)
  • 01-ESP8266 NodeMCU 物联网开发初识

    Author:teacherXue ESP8266 是 Espressif Systems 生产的 Wi-Fi 片上系统 (SoC)。它非常适合物联网和家庭自动化项目,目前有非常高的市场普及率,还有更加高端的同时支持wifi和蓝牙的双核心芯片ESP32,可以在乐鑫官网查看完整的芯片列表。 ESP8266芯片的技术特性 处理器: L106 32 位 RISC 微

    2024年02月11日
    浏览(48)
  • NodeMCU ESP8266开发流程详解(图文并茂)

    NodeMCU ESP8266基于Arduino IDE的开发相对来说还是比较容易上手的,我们基本需要以下几个东西; 一台安装好Arduino IDE的PC,并且已经部署环境(安装好开发板的串口驱动); NodeMCU ESP8266 开发板; USB线(根据实际开发板的情况,本文需要Micro-USB的线); 具体如下图所示; 本文默

    2024年02月06日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包