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

jetson nano和K210的学习就这样告一段落了,看着手上的东西,还有一块ESP8266,这不是接入物联网的好工具吗,于是便开始了解这个东西,真的真的好香,网上有安信可和乐鑫的官方教程,因为python环境的冲突放弃了安信可,选择了更为简单的Arduino ide进行学习,今天我给大家分享一下直接上云的学习过程。


前言

之所以选择Arduino ide进行开发,原因主要有两个:一、安信可和我电脑的环境冲突了,另外本人也不是很会JAVA 。二、之前有过51和32的学习经历上手Arduino ide很快代码一下就能看懂(Arduino开发真的好丝滑)。好了,废话不多说,这篇博客将开启你的上云之旅。

一、ESP8266是什么?

ESP8266是一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能。
在这里插入图片描述

二、操作步骤

1.环境准备

1.硬件准备

这里我准备了如下东西
1.ESP8266X1
2.0.96寸OLED显示屏X1
3.DHT11温湿度传感器X1
4.YL-69土壤湿度传感器X1
5.MQ-3酒精浓度传感器X1

2.软件准备

1.Arduino ide1.8.3

基本上准备这么多东西就够了,首先你需要在Arduino ide上配置ESP8266的开发环境,网上真的太多了,我就不一点点的介绍了,可以推荐一个up主的视频讲的特别好。(https://www.bilibili.com/video/BV1SX4y1F77s?p=1)
在这里插入图片描述
配置完成后就可以在工具进行选择了,这里我选择的是We Mos D1 R1,其实还有好多版本都可以。
在这里插入图片描述

2.阿里云端

你要上传到云平台,肯定需要在阿里云端进行相应的配置,得到你需要的三元组以及其他一些属性等等。具体操作如下

1.创建自己的设备

在这里插入图片描述
进入到阿里云控制台,找到物联网平台,创建属于自己的设备
在这里插入图片描述
点击公共实例进行创建
在这里插入图片描述
里面有个设备管理,点击产品,里面有个创建产品
在这里插入图片描述
输入名称即可,然后选择标准品类
在这里插入图片描述
这里我创建的是温湿度检测。在设备里添加设备就可以了
在这里插入图片描述
点击查看,里面就有你需要的三元组
在这里插入图片描述
到这里,阿里云端的准备工作就完成了。

2.ESP8266端

一个好的教程真的很重要,这里我附上上云的源码,大家可以根据我写的备注自行修改

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DHT.h"

#define sensor_Pin   0  
#define DHTPIN 2     
#define DHTTYPE DHT11   
DHT dht(DHTPIN, DHTTYPE);
float h;
float t;
long s;
// 连接WIFI和密码 
#define WIFI_SSID         "wifi名"
#define WIFI_PASSWD       "密码"


//设备的三元组信息
#define PRODUCT_KEY       "*****"
#define DEVICE_NAME       "*****"
#define DEVICE_SECRET     "*****"
#define REGION_ID         "cn-shanghai"

//不需要改 
#define MQTT_SERVER       PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT         1883
#define MQTT_USRNAME      DEVICE_NAME "&" PRODUCT_KEY

#define CLIENT_ID     //这里使用技小新可以生成,注意密码和密钥一定要对否则连不上MQTT    "FESA234FBDS24|securemode=3,timestamp=789,signmethod=hmacsha1|"
#define MQTT_PASSWD       "***********************"

#define ALINK_BODY_FORMAT         "{\"id\":\"ESP8266\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST     "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"

unsigned long lastMs = 0;
WiFiClient espClient;
PubSubClient  client(espClient);


float soil_data = 0;  


//连接wifi
void wifiInit()
{
    
    
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASSWD);
    while (WiFi.status() != WL_CONNECTED)
    {
    
    
        delay(1000);
        Serial.println("WiFi not Connect");
    }
    client.setServer(MQTT_SERVER, MQTT_PORT);   //连接MQTT服务器 
}

//mqtt连接
void mqttCheckConnect()
{
    
    
    while (!client.connected())
    {
    
    
        client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD);
    }
}

void mqttIntervalPost()
{
    
    
  soil_data = analogRead(sensor_Pin);   //模拟数据读取(A0脚输入的数据)385-1024
  soil_data -= 385;         //0-639
  soil_data /= 6.39;        //0.00-100.00,变为百分比
  soil_data = 100 - soil_data;         //修改为百分比越大湿度越大
    char param[32];
    char jsonBuf[128];
    read_data();
    sprintf(param, "{\"CurrentTemperature\":%f}",t);
    //这里\"**"\要选择对应的标识符,否则数据发不过去。
    sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
    Serial.println(jsonBuf);
    boolean e = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);

    sprintf(param, "{\"CurrentHumidity\":%f}",h);
    sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
    Serial.println(jsonBuf);
     boolean f = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
}

void setup() 
{
    
    
    Serial.begin(115200);
    wifiInit();
    dht.begin();
}

void read_data()
{
    
    
  float read_h = dht.readHumidity();//湿度
  float read_t = dht.readTemperature();//温度
  h = read_h;
  t = read_t;
  Serial.print("湿度:");
  Serial.print(h);
  Serial.println("%");
  Serial.print("温度:");
  Serial.println(t);
}

void loop()
{
    
    
   s=millis();
  delay(500);
  read_data();
  Serial.println(millis()-s);
    if (millis() - lastMs >= 5000)
    {
    
    
        lastMs = millis();
        mqttCheckConnect(); 
        mqttIntervalPost();
    }
    client.loop();
    delay(2000);
}

标识符的选择如下图
在这里插入图片描述
然后烧写程序到ESP8266上。

三、现象展示

在这里插入图片描述
这里我用了好几个模块,所以会显示很多。
一篇好的博客可以让你事半功倍,这便是我写博客的初心,希望你看了这篇博客能够2小时上云。加油!
嘿嘿,今天还是很充实的,可以将各个模块的数据上传到云平台了,下一步通过串口接收数据,将接收到的数据上传到云平台。

总结

学习是一个有趣的过程,我写博客主要是为了记录自己的大学生活,同样也希望我的博客能够帮到那些想学习的同学。fighting!!!
这里同样送给大家一句话:
瞩目远方,你才会加快步伐;观赏风景,你才会步履轻盈;风雨兼程,你才能成功登顶!

猜你喜欢

转载自blog.csdn.net/qq_51963216/article/details/121408579