WiFi IoT模块开箱上电之HTTPGet()问题

2021-02-277904
AI 快速预览详细 收起
本文讨论了使用DFRobot WiFi IoT模块通过HTTP协议向Web服务器提交温度数据时遇到的问题。尽管IoT、WiFi、HTTP配置均已完成,但在调用HTTPGet()方法时一直失败。具体报错现象为始终返回错误信息“Error...”。文章提供了详细的调试步骤和解决方案,包括检查HTTP地址和参数是否正确,确保网络连接正常,逐步排查代码逻辑。这些步骤有助于用户快速定位并解决该问题。


WiFi IoT模块使用MQTT协议连接EasyIoT平台,已在前篇描述过,现在利用HTTP连接一台Web服务器,遇到一点问题。

IoT、WiFi、HTTP配置看上去都完成了,但是调用HTTPGet()方法时,一直失败。我的思路是利用HTTPGet()方法,向一台Web服务器(上位机http://openkevin.net,Servlet为dfrobotWifi,唯一参数a01)提交室内温度数据(DS18B20温度传感连在数字端口2)。

代码如下:

  1. #include <SoftwareSerial.h>
  2. #include <OneWire.h>
  3. #include "DFRobot_WiFi_IoT_Module.h"
  4. DFRobot_WiFi_IoT_Module_I2C IoT;
  5. const char *WIFI_SSID                       = "Linksys19544";
  6. const char *WIFI_PASSWORD          = "********";
  7. const char *EASY_IOT_SERVER        = "iot.dfrobot.com.cn";
  8. const char *EASY_IOT_PORT           = "1883";
  9. const char *EASY_IOT_ID                  = "********";
  10. const char *EASY_IOT_PWD            = "********";
  11. const char *SUBSCRIBE_TOPIC        = "RrRlB-yMR";
  12. const char *PUBLISH_TOPIC            = "RrRlB-yMR";
  13. const char *HTTP_ADDRESS            = "openkevin.net";
  14. const char *EASY_IOT_SEND_MESSAGE  = "";
  15. int DS18S20_Pin = 2;
  16. OneWire ds(DS18S20_Pin);
  17. void setup()
  18. {
  19.   Serial.begin(115200);
  20.   pinMode(13, OUTPUT);
  21.   digitalWrite(13, HIGH);
  22.   while(IoT.begin() != 0)
  23.   {  
  24.     Serial.println("IoT init ERROR!!!!");
  25.     delay(100);
  26.   }
  27.   Serial.println("IoT init Success");
  28.   while(IoT.connectWifi(WIFI_SSID, WIFI_PASSWORD) != 0)
  29.   {  
  30.     Serial.print(".");
  31.     delay(100);
  32.   }
  33.   Serial.println("Wifi Connect Success");
  34.   while(IoT.HTTPBegin(HTTP_ADDRESS) != 0)
  35.   {
  36.     Serial.println("Parameter is empty!");
  37.     delay(100);
  38.   }
  39.   Serial.println("HTTP Configuration Success");
  40.   
  41.   while(IoT.HTTPGet("http://openkevin.net/servlet/dfrobotWifi?a01=00") != 0)
  42.   {
  43.     Serial.println("Error...");
  44.   }
  45.   Serial.println("HTTPGet Success");
  46. }
  47. void loop()
  48. {
  49.   //float temperature = getTemp();
  50.   //Serial.println(temperature);
  51.   //String txtTemp2 = "http://openkevin.net/servlet/dfrobotWifi?a01=" + String(temperature);
  52.   //while(IoT.HTTPGet(txtTemp2)!=0)
  53.   //{
  54.   //  Serial.println("Error...");
  55.   //}
  56.   //Serial.println("HTTPGet Success");
  57. }
  58. float getTemp()
  59. {
  60.   //returns the temperature from one DS18S20 in DEG Celsius
  61.   byte data[12];
  62.   byte addr[8];
  63.   if ( !ds.search(addr))
  64.   {
  65.     //no more sensors on chain, reset search
  66.     ds.reset_search();
  67.     return -1000;
  68.   }
  69.   if ( OneWire::crc8( addr, 7) != addr[7])
  70.   {
  71.     Serial.println("CRC is not valid!");
  72.     return -1000;
  73.   }
  74.   if ( addr[0] != 0x10 && addr[0] != 0x28)
  75.   {
  76.     Serial.print("Device is not recognized");
  77.     return -1000;
  78.   }
  79.   ds.reset();
  80.   ds.select(addr);
  81.   ds.write(0x44,1); // start conversion, with parasite power on at the end
  82.   byte present = ds.reset();
  83.   ds.select(addr);
  84.   ds.write(0xBE); // Read Scratchpad
  85.   for (int i = 0; i < 9; i++)
  86.   {
  87.     // we need 9 bytes
  88.     data[i] = ds.read();
  89.   }
  90.   ds.reset_search();
  91.   byte MSB = data[1];
  92.   byte LSB = data[0];
  93.   float tempRead = ((MSB << 8) | LSB); //using two's compliment
  94.   float TemperatureSum = tempRead / 16;
  95.   return TemperatureSum;
  96. }
复制代码

看上去IoT、WiFi、HTTP都初始化通过了,但是使用HTTPGet()提交数据时,一直失败。

WiFi IoT模块开箱上电之HTTPGet()问题图2

然而,手工从浏览器向Web服务器提交数据的话(Http Get),服务器端能够正常接收。

WiFi IoT模块开箱上电之HTTPGet()问题图1

Serlvet能显示出接收到的值。

WiFi IoT模块开箱上电之HTTPGet()问题图3

以上,请哪位大神给予指点,万分感谢。

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
wahaha
wahaha
你填写的数据是有问题的 在HTTPGet中应该填写“servlet/dfrobotWifi?a01=00”,其他的内部会处理
kevinzhang19701
kevinzhang19701
作者
回复wahaha
我试试看,感谢感恩。
- 没有更多了 -