Robofun 機器人論壇

標題: 懇請教 Arduino使用 ESP8266 Wi-Fi上傳資料遭遇的問題 [打印本頁]

作者: MIZUKI    時間: 2016-7-20 10:40
標題: 懇請教 Arduino使用 ESP8266 Wi-Fi上傳資料遭遇的問題
懇請教 Arduino使用 ESP8266 Wi-Fi上傳資料遭遇的問題



各位版上的前輩好,最近個人剛開始接觸Arduino
一直不斷想嘗試用手上的ESP8266 Wi-Fi晶片,將訊號資料上傳到雲端或自建的資料庫上作儲存統計
但無論反覆怎麼參考各種設定,都一直無法順利架動將數據上傳到thingspeak 或自機資料庫上頭

不知道各位否能由底下的資訊
指點出目前施作環結的問題癥結所在。#編譯環境為Linux 與Win皆有

底下是個人參考此網站的實驗流程:
http://ruten-proteus.blogspot.tw/2014/11/internet-of-thing-arduino-esp8266.html


目前測試的電路線路一



另一種方式是參考由書上教學的5V 降壓供電的線路



以下為測試的程式代碼

  1. #include <SoftwareSerial.h>
  2. #include "DHT.h"

  3. #define DEBUG

  4. #define _ledpin     13

  5. //*-- Hardware Serial
  6. #define _baudrate   9600

  7. //*-- Software Serial
  8. //
  9. #define _rxpin 2
  10. #define _txpin 3
  11. SoftwareSerial debug(_rxpin,_txpin); // RX, TX

  12. //*-- DHT11
  13. #define _dhtpin     8
  14. #define _dhttype    DHT11

  15. DHT dht11( _dhtpin, _dhttype );
  16. uint8_t dhtbuf[2];

  17. //*-- IoT Information
  18. #define SSID "Tenda_5D1C08"
  19. #define PASS "12345678"
  20. #define IP "184.106.153.149" // ThingSpeak IP Address:api.thingspeak.com

  21. // GET /update?key=[THINGSPEAK_KEY]&field1=[data 1]&filed2=[data 2]...;
  22. String GET = "GET /update?key=0VD8RROGTK2MTIFT";

  23. void setup() {
  24.     Serial.begin( _baudrate );
  25.     debug.begin( _baudrate );

  26.     sendDebug("AT");
  27.     delay(5000);
  28.     if(Serial.find("OK"))
  29.     {
  30.         debug.println("RECEIVED: OK\nData ready to sent!");
  31.         connectWiFi();
  32.     }

  33.     // DHT11
  34.     dht11.begin();

  35.     pinMode( _ledpin, OUTPUT );
  36.     digitalWrite( _ledpin, LOW );
  37. }

  38. void loop() {
  39.     dhtbuf[0] = dht11.readHumidity();
  40.     dhtbuf[1] = dht11.readTemperature();


  41.     if( isnan(dhtbuf[0]) || isnan(dhtbuf[1]) )
  42.     {
  43.         debug.println( "Failed to read form DHT11" );
  44.     }
  45.     else
  46.     {
  47.         digitalWrite( _ledpin, HIGH );
  48.         char buf[3];
  49.         String HH, TT;
  50.         buf[0] = 0x30 + dhtbuf[1] / 10;
  51.         buf[1] = 0x30 + dhtbuf[1] % 10;
  52.         TT = (String(buf)).substring( 0, 2 );
  53.         buf[0] = 0x30 + dhtbuf[0] / 10;
  54.         buf[1] = 0x30 + dhtbuf[0] % 10;
  55.         HH = (String(buf)).substring( 0, 2 );

  56.         updateDHT11( TT, HH );
  57.         #ifdef DEBUG
  58.             debug.print("Humidity: ");
  59.             debug.print( HH );
  60.             debug.print(" %\t");
  61.             debug.print("Temperature: ");
  62.             debug.print( TT );
  63.             debug.println(" *C\t");
  64.         #endif
  65.         digitalWrite( _ledpin, LOW );
  66.     }

  67.     delay(6000);   // 6second
  68. }

  69. void updateDHT11( String T, String H )
  70. {
  71.     // ³]©w ESP8266 §@¬° Client ºÝ
  72.     String cmd = "AT+CIPSTART=\"TCP\",\"";
  73.     cmd += IP;
  74.     cmd += "\",80";
  75.     sendDebug(cmd);
  76.     delay(2000);
  77.     if( Serial.find( "Error" ) )
  78.     {
  79.         debug.print( "RECEIVED: Error\nExit1" );
  80.         return;
  81.     }

  82.     cmd = GET + "&field1=" + T + "&field2=" + H +"\r\n";
  83.     Serial.print( "AT+CIPSEND=" );
  84.     Serial.println( cmd.length() );
  85.     if(Serial.find( ">" ) )
  86.     {
  87.         debug.print(">");
  88.         debug.print(cmd);
  89.         Serial.print(cmd);
  90.     }
  91.     else
  92.     {
  93.         sendDebug( "AT+CIPCLOSE" );
  94.     }
  95.     if( Serial.find("OK") )
  96.     {
  97.         debug.println( "RECEIVED: OK" );
  98.     }
  99.     else
  100.     {
  101.         debug.println( "RECEIVED: Error\nExit2" );
  102.     }
  103. }

  104. void sendDebug(String cmd)
  105. {
  106.     debug.print("SEND: ");
  107.     debug.println(cmd);
  108.     Serial.println(cmd);
  109. }

  110. boolean connectWiFi()
  111. {
  112.     Serial.println("AT+CWMODE=1");
  113.     delay(2000);
  114.     String cmd="AT+CWJAP=\"";
  115.     cmd+=SSID;
  116.     cmd+="\",\"";
  117.     cmd+=PASS;
  118.     cmd+="\"";
  119.     sendDebug(cmd);
  120.     delay(5000);
  121.     if(Serial.find("OK"))
  122.     {
  123.         debug.println("RECEIVED: OK");
  124.         return true;
  125.     }
  126.     else
  127.     {
  128.         debug.println("RECEIVED: Error");
  129.         return false;
  130.     }

  131.     cmd = "AT+CIPMUX=0";
  132.     sendDebug( cmd );
  133.     if( Serial.find( "Error") )
  134.     {
  135.         debug.print( "RECEIVED: Error" );
  136.         return false;
  137.     }
  138. }
複製代碼

序列埠監控視窗的訊息



之前版上有版友也提問過類似的問題
但參考其作法  將TX  RX 改接 0和1 問題依舊無解
http://www.robofun.net/forum/thread-10017-1-2.html
作者: 超新手    時間: 2016-7-20 11:57
很奇怪?
如果你是參考此網站的實驗流程:
http://ruten-proteus.blogspot.tw ... rduino-esp8266.html
它上面的電路明明是接 0 和 1(而且用了 5 V 轉 3.3 的電路)
從程式來看, 也是接  0 和 1
作者: MIZUKI    時間: 2016-7-20 15:37
本帖最後由 MIZUKI 於 2016-7-20 17:46 編輯

雖然之前爬過文 也參考測試版上之前的帖子的建議  將TX  RX 改接 在 0和1  測試過  但問題依舊如故
但令我疑惑的是   #define _rxpin 2  #define _txpin 3  指的不是宣告定義將傳輸阜為2 3嗎?

而另一方面,按照原作者的佈線電路圖
Level Shifter  3V3 / 5V 轉換模組指的  是指底下這種元件?#它有型號上的分別嗎?


若在手邊沒有3V3 / 5V 轉換模組可以利用的情況下,還有其他的方式可以克服使其運作嗎?
作者: 超新手    時間: 2016-7-20 17:17
本帖最後由 超新手 於 2016-7-20 17:20 編輯

>> #define _rxpin 2  #define _txpin 3  指的不是宣告定義將傳輸阜為2 3嗎?
是, 但它的用途是用來 DEBUG
真正傳給ESP8266的是用 SERIAL, 也就是 0, 1
>>還有其他的方式可以克服使其運作嗎?
有....就是硬接
你的上面圖就是這樣
但它有接限流電阻(2.2K)保護一下
不接應該也沒差....只是I/O比較容易掛點而已(也沒那麼容易)
比較有問題的是ESP8266 3.3V 傳到 Arduino 5V 的RX
可能可以, 也可能有問題
作者: 超新手    時間: 2016-7-20 17:22
本帖最後由 超新手 於 2016-7-20 17:24 編輯

1) 所以這是你的 wifi 沒錯嗎?
#define SSID "Tenda_5D1C08"
#define PASS "12345678"
2) 你有試著用 pc 的瀏灠器(如ie)連到
http://184.106.153.149/
3) 這個key 0VD8RROGTK2MTIFT是你自己的嗎?
作者: MIZUKI    時間: 2016-7-20 17:36
本帖最後由 MIZUKI 於 2016-7-20 17:43 編輯

1) 所以這是你的 wifi
>>是的 (因為我想表達完整的程式碼  所以就保留下來了

2>你有試著用 pc 的瀏灠器(如ie)連到
>>有,可以

3) 這個key 0VD8RROGTK2MTIFT是你自己的嗎?
>>是的
真正傳給ESP8266的是用 SERIAL, 也就是 0, 1
>>恍然大悟




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2