Arduino通过ESP8266模块发送数据到ONENET云服务器(HTTP)

1、具体操作

具体操作参考这篇文章,非常好用!但是注意最下面的postData()函数中,url中还要改成自己的设备id。

(1条消息) arduino通过esp8266模块发送数据到云服务器_arduino esp8266 上传数据_代码小白101的博客-CSDN博客

2、代码修改

由于我的传感器数据比较多(6个),所以在使用次代码时出现了上传失败的问题,于是我把6个数据拆成了3次发送,代码如下:

主要修改了updateTemp()函数、postData()函数。

#include <stdlib.h>
#include <SoftwareSerial.h>

#define SSID "VIVO X27"      //wifi名
#define PASS "l123321000" //wifi密码
#define IP "api.heclouds.com" // 连接thingspeak.com服务器

const char OneNetServer[] = "api.heclouds.com";
//String GET = "GET /update?key=ylZJctZfVULDM4NvVRfec97Axxw="; //输入前面记下的API
const char APIKEY[] = "Zxc7y94ESpWDm=uu310H8CHWlME="; 
int32_t DeviceId = 1062145212;                     
const char DS_ax[] = "ax";
const char DS_ay[] = "ay";
const char DS_az[] = "az";
const char DS_press[] = "F";
const char DS_temp[] = "C";
const char DS_v[] = "V";
SoftwareSerial ESP8266(8, 9); // 定义软串口
const int tcpPort = 80;
//初始化-----------------------------------------
void setup()
{
  ESP8266.begin(115200);
  Serial.begin(115200);
  ESP8266.println("AT");//指令测试
  delay(1000);
  if (ESP8266.find("OK"))  //接收指令正常则返回OK
  {
    Serial.println("Wifi module connection is normal");
    connectWiFi();
  }
  else {
    Serial.println("Wifi module connection failed");
  }
}

//主循环-----------------------------------------
void loop()
{
  //Serial.println((float)DHT11.temperature);
  //Serial.println((float)DHT11.humidity);
  float ax= 111.11;
  float ay = 222.22;
  float az = 333.33;
  float press = 444.44;
  float temp = 555.55;
  float v = 666.66;
  char buffer[10];
  String ax_str = dtostrf(ax, 4, 2, buffer);
  String ay_str = dtostrf(ay, 4, 2, buffer);
  String az_str = dtostrf(az, 4, 2, buffer);
  String press_str = dtostrf(press, 4, 2, buffer);
  String temp_str = dtostrf(temp, 4, 2, buffer);
  String v_str = dtostrf(v, 4, 2, buffer);
  updateTemp( 1,ax_str, ay_str);
  updateTemp( 2,az_str, press_str);
  updateTemp( 3, temp_str, v_str);
  delay(10);
}


void updateTemp(int a,String data1, String data2)
{
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  //sendDebug(cmd);                        //发送指令,链接服务器
  ESP8266.println(cmd);
  delay(500);
  if (ESP8266.find("Error"))
  {
    Serial.print("Connection to server failed");
    return;
  }
  //cmd = GET + "&field1=" + temph + "&field2=" + tempt + "\r\n";       //记录T和H的值
  cmd = postData(DeviceId, a, data1, data2);
  ESP8266.print("AT+CIPSEND=");
  ESP8266.println(cmd.length());
  if (ESP8266.find(">"))
  {
    Serial.print(">");
    ESP8266.print(cmd);
    Serial.print(cmd);
  }
  else
  {
    Serial.println("Data transmission failure");
  }
  if (ESP8266.find("OK"))
  {
    Serial.println("RECEIVED: OK");
    ESP8266.println("AT+CIPCLOSE");
  }
  else
  {
    Serial.println("Data transmission failure");
  }
}

boolean connectWiFi()
{
  //Serial.println("AT+CIPMUX=0");
  ESP8266.println("AT+CWMODE=1");
  ESP8266.println("AT+RST");
  delay(2000);
  String cmd = "AT+CWJAP=\"";
  cmd += SSID;
  cmd += "\",\"";
  cmd += PASS;
  cmd += "\"";
  ESP8266.println(cmd);
  delay(1000);
  if (ESP8266.find("OK"))
  {
    Serial.println("Wifi connection successful");
    return true;
  } else
  {
    Serial.println("Wifi connection failed");
    return false;
  }
}

String postData(int dId,int a, String data1, String data2)
{
    // 创建发送请求的URL -- We now create a URI for the request
    String url = "/devices/1062145212";//此处修改为你的设备id
    //url += String(dId);
    url += "/datapoints?type=3";  
    String data;         
    if(a==1){
    data = "{\"" +
            String(DS_ax) + "\":" + data1 + ",\"" +
            String(DS_ay) + "\":" + data2 + "}";}
    else if(a==2){
    data = "{\"" +
            String(DS_az) + "\":" + data1 + ",\"" +
            String(DS_press) + "\":" +data2 + "}";}
    if(a==3){
    data = "{\"" +
            String(DS_temp) + "\":" + data1 + ",\"" +
            String(DS_v) + "\":" + data2 + "}";}

    // 创建发送指令 -- We now combine the request to the server
    String post_data = "POST " + url + " HTTP/1.1\r\n" +
                       "api-key:" + APIKEY + "\r\n" +
                       "Host:" + OneNetServer + "\r\n" +
                       "Content-Length: " + String(data.length()) + "\r\n" +                     //发送数据长度
                       "Connection: close\r\n\r\n" +
                       data;
    return post_data;
}

如果有错误的或者让大家有更好地方法,欢迎下方评论留言!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要将压力传感器数据上传到OneNet,需要使用ArduinoESP8266模块。以下是大致的步骤: 1. 连接ArduinoESP8266模块,并将它们连接到电脑上。 2. 在Arduino IDE中,安装ESP8266库,并将ESP8266模块的固件升级到最新版本。 3. 编写Arduino代码,使用ESP8266模块连接到Wi-Fi网络,并将压力传感器数据发送到OneNet平台。 4. 在OneNet平台上创建一个设备,并为该设备添加一个数据流,用于接收压力传感器数据。 5. 在Arduino代码中,将OneNet平台的设备ID和API Key添加到代码中,以便将数据发送到正确的设备和数据流。 6. 将Arduino代码上传到Arduino板上,并观察OneNet平台上的数据流,以确保数据已成功上传。 需要注意的是,以上步骤仅为大致的指导,具体实现可能会因硬件和软件环境的不同而有所差异。 ### 回答2: Arduino是一种开源的电子单板,可以用于制作各种智能化设备。而ESP8266是一种可以连接Wi-Fi网络的芯片,可以将Arduino设备连接到网络上。在这种情况下,我们的目标是将压力传感器数据通过ESP8266上传到OneNet平台,以便我们查看和分析这些数据。 首先,我们需要连接压力传感器到Arduino电路板上。这可以通过使用适当的连线和引脚来实现。然后,我们需要使用Arduino的编程语言来设置传感器读取和数据的处理器。具体而言,我们需要添加相应的代码,以从传感器中读取数据,并使用串口向ESP8266传递数据。在这个阶段,我们需要确保数据格式正确,并且没有误差或噪音。 接下来,我们需要将ESP8266连接到Wi-Fi网络上,以便传输数据。这可以通过在ESP8266上运行相应的AT命令来实现。AT命令是一种与ESP8266通信的特殊的指令,可以通过串口发送给ESP8266并从其读取响应。我们需要在Arduino编程中添加相应的AT命令,以便将ESP8266与Wi-Fi网络连接起来,以便上传数据。 最后,我们需要将数据上传到OneNet平台上。为此,我们需要使用OneNet提供的API接口来向平台发送数据。API接口是一种可以用于与外部应用程序通信的接口,可以通过HTTP请求与OneNet通信。我们需要将数据转换为正确的格式,并将其作为HTTP POST请求发送给OneNet API。之后,我们可以使用OneNet的Web界面或其他应用程序来查看和分析我们上传的数据。 总的来说,连接ESP8266Arduino电路板来上传压力传感器数据到OneNet平台是一个复杂的过程,需要一定的技术和编程知识。但是,通过仔细阅读文档和学习相关知识,我们可以成功地将传感器数据上传到OneNet平台并进行分析。 ### 回答3: Arduino是一种基于开源硬件的低成本微控制器平台,常用于制作小型电子产品和原型制作。而ESP8266是一种Wi-Fi芯片,具有低功耗、高度集成和极强的实时性能等特点。同时,OneNet是一种兼容于IoT的云平台。 在实现ArduinoESP8266的连接后,需要使用Analog输入的方式读取压力传感器的数据。将数据转换为数字信号后,利用ESP8266通过WIFI连接到OneNet云平台上,使用HTTP协议将数据上传到云端。这时,通过OneNet的API接口,可以把上传的数据进行在线查看和分析。 具体实现方案如下: 1. 首先获取ArduinoESP8266的开发板和连接线,搭建好硬件环境。 2. 在Arduino IDE中编写程序,输入Analog输入读取压力传感器的数据,并通过串口检测调试。 3. 在ESP8266中配置好WIFI连接信息,将初步测试程序上传到ESP8266,并与Arduino连接。 4. 将ESP8266编程,实现数据上传到OneNet云平台。 5. 在OneNet云平台上创建设备和数据流,并获得API密钥。 6. 编写OneNet API接口程序,将上传的数据通过POST请求发送到OneNet云平台上指定的设备和数据流中。 7. 通过OneNet云平台提供的数据管理和分析功能,对上传的数据进行管理和分析。 总之,利用ArduinoESP8266可以实现智能化的IoT系统。上传压力传感器数据到OneNet云平台,可以为用户提供更加便捷、高效和准确的数据管理和分析。同时,这种方案也适用于其他Iot应用场景,可以实现智能室内环境监测、智能家居等众多领域的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值