ESP8266 NodeMcu 连接onenet 保姆级教学

ESP8266 nodemcu模块使用Arduino IDE 连接onenet示例


前言

很多同学在设计毕设的时候总会用到esp8266这个模块,本文用简单的方法教你快速使用

一、onenet平台设置

        1、注册onenet平台,这里就不多说了。

        2、点击控制台 --> 全部产品服务 --> 多米协议接入 --> HTTP(这里我们使用HTTP协议)—> 添加产品

         3、创建添加产品

                 这里就随便添加个产品就可以了。

                

        4、进入刚才创建的Test_HTTP,添加新设备

                

               

         5、打开设备详情,添加APIkey(这个APIkey非常重要)

二、ESP8266 nodeMcu程序 以arduino IDE为例

1.程序

注意:程序中需要修改wifi的名字和密码,wifi不要使用5G的,测试中发现5G好像连接不上

程序引用Arduino IDE 开发ESP8266 以HTTP方式连接onenet_淮南草的博客-CSDN博客_arduino http onenet

#include <ESP8266WiFi.h>
 
const char *ssid     = "Xiaomi";//这里写入网络的ssid 
const char *password = "88886666";//wifi密码
const char *host = "183.230.40.33";//修改为Server服务端的IP,即你电脑的IP,确保在同一网络之下。
 
WiFiClient client;
const int tcpPort = 80;//修改为你建立的Server服务端的端口号,此端口号是创建服务器时指定的。
 
 
void setup()
{
    Serial.begin(115200);    
    pinMode(LED_BUILTIN,OUTPUT);
    delay(10);
    Serial.println();
    Serial.print("Connecting to ");//会通过usb转tll模块发送到电脑,通过ide集成的串口监视器可以获取数据。
    Serial.println(ssid);
 
    WiFi.begin(ssid, password);//启动
 
     //在这里检测是否成功连接到目标网络,未连接则阻塞。
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
    }
 
 //几句提示
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    
}
 
 
void loop()
{
    while (!client.connected())//若未连接到服务端,则客户端进行连接。
    {
        if (!client.connect(host, tcpPort))//实际上这一步就在连接服务端,如果连接上,该函数返回true
        {
            Serial.println("connection....");
            delay(500);
 
        }
    }
    digitalWrite(LED_BUILTIN, HIGH);    
    delay(1000);                      // Wait for a second
    digitalWrite(LED_BUILTIN,LOW );
    
    if (client.connected()) {              //若连接成功,就发送POST 请求上报数据
    String url = "http://api.heclouds.com/devices/927732558/datapoints?type=3";  //参数type=3表示用 简洁数据格式,592465545是你在移动OneNET上创建的设备ID 不是产品的ID!!!! 一定要记住
    client.print(String("POST ")+url+" HTTP/1.1\r\n");                                                 //使用HTTP/1.1协议
    client.print(String("api-key: ")+"w0P44TtUerqICXnRaQTptfBHwbk=\r\n");             //一定要改为设备的API key,不是产品的API key!!!! 一定要记住
    client.print(String("Host: ")+"api.heclouds.com\r\n");
    client.print("Connection: close\r\n");
//    client.print("Content-Length:23\r\n\r\n");
//    client.print(String("{\"SoilHUM\":12"));
//    client.print(String(",\"TEM\":30}"));
 
//    client.print(String("{\"SoilHUM\":69,\"TEM\":25}"));
//    client.print(String("{'SoilHUM':10,'TEM':10}"));
      uint8_t tem= 5;
      uint8_t hum= 6;
      String data = "{'SoilHUM':" + String(hum) + ",'TEM':"+  String(tem) + "}";
//      Serial.write(data);
      Serial.write("data:");
      Serial.print(data);
      Serial.print(String(data.length()));
      Serial.print("Content-Length:"+ String(data.length()) + "\r\n\r\n");
      client.print("Content-Length:"+ String(data.length()) + "\r\n\r\n");
      client.print(data);
  }
  client.stop();                     //关闭HTTP客户端
  delay(10000);   
    while (client.available())//available()表示是否可以获取到数据
    {
      //控制led
//        char val = client.read();//read()表示从网络中读取数据。
//        if(val=='a'){//pc端发送a和b来控制
//           digitalWrite(led, LOW);
//        }
//        if(val=='b')
//        {
//            digitalWrite(led, HIGH);
//        }
 
      //透传数据
      uint8_t c = client.read();
      Serial.write(c);
 
    }
 if (Serial.available())//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
  {
      delay(50);//加50ms延迟 保证串口字符接收完毕
      size_t counti = Serial.available();//串口缓冲器 返回的是缓冲区准确的可读字节数
      uint8_t sbuf[counti];
      Serial.readBytes(sbuf, counti);//从串口读取指定长度counti的字符到缓存数组sbuf。
      delay(50);//加50ms延迟 保证缓存完毕
      client.write(sbuf, counti);
 
  }
 
 
 
}
 

2.修改API和产品ID

代码如下(示例):

String url = "http://api.heclouds.com/devices/927732558/datapoints?type=3";  //参数type=3表示用 简洁数据格式,592465545是你在移动OneNET上创建的设备ID 不是产品的ID!!!! 一定要记住
    client.print(String("POST ")+url+" HTTP/1.1\r\n");                                                 //使用HTTP/1.1协议
    client.print(String("api-key: ")+"w0P44TtUerqICXnRaQTptfBHwbk=\r\n");  

标出颜色的两个位置需要修改,第一处是设备ID 第二处是上文提到的APIkey,修改成自己的即可


总结

 查看数据在数据流里查看就行了。本人小白,欢迎指出错误,一起共同努力。

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是ESP8266 NodeMCU连接OneNET的基本代码框架: ```c++ #include <ESP8266WiFi.h> #include <PubClient.h> // Replace with your network credentials const* ssid = "your_SSID"; const char password = "your_PASSWORD"; // Replace with your One MQTT server and port const char* server = ".heclouds.com"; const int port = 6002; // Replace with your OneNET device ID and API key const char* deviceId = "your_DEVICE_ID"; const char* apiKey "your_API_KEY"; // Create an instance of the WiFiClient object WiFiClient wifiClient; // Create an instance of the PubSubClient object PubSubClient mqttClient(wifiClient); // Function to connect to OneNET MQTT server void connectToMqttServer() { while (!mqttClient.connected()) { Serial.println("Connecting to OneNET MQTT server..."); // Create a unique client ID using the ESP8266 MAC address String clientId = "ESP8266Client-"; clientId += String(WiFi.macAddress()); // Connect to OneNET MQTT server if (mqttClient.connect(clientId.c_str(), deviceId, apiKey)) { Serial.println("Connected to OneNET MQTT server!"); } else { Serial.print("Failed to connect to OneNET MQTT server with error code "); Serial.println(mqttClient.state()); delay(2000); } } } void setup() { Serial.begin(9600); // Connect to Wi-Fi network WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi network..."); } Serial.println("Connected to WiFi network!"); // Set OneNET MQTT server and port mqttClient.setServer(server, port); // Connect to OneNET MQTT server connectToMqttServer(); } void loop() { // Add your code here to publish or subscribe to MQTT topics } ``` 在上面的代码中,你需要将以下变量替换为你自己的值: - `ssid` 和 `password`:你的 Wi-Fi 网络 SSID 和密码 - `server` 和 `port`:OneNET MQTT 服务器地址和端口 - `deviceId` 和 `apiKey`:你的 OneNET 设备 ID 和 API 密钥 接下来,你可以在 `loop()` 函数中添加你的代码来发布或订阅 MQTT 主题。例如,下面是一个发布消息到 OneNET 的例子: ```c++ void loop() { // Check if connected to OneNET MQTT server if (!mqttClient.connected()) { connectToMqttServer(); } // Publish a message to OneNET mqttClient.publish("topic", "message"); // Wait for a few seconds delay(5000); } ``` 这将发布一个名为 "topic" 的主题,并将消息 "message" 发送到 OneNET。你可以通过 OneNET 控制台查看接收到的消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值