MIZUKI 發表於 2016-7-20 10:40:02

懇請教 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


目前測試的電路線路一
http://2cat.or.tl/~scribe/2prog/src/1468758239365.jpg


另一種方式是參考由書上教學的5V 降壓供電的線路
https://dl.dropboxusercontent.com/u/74831703/P_20160720_093148.jpg


以下為測試的程式代碼

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

#define DEBUG

#define _ledpin   13

//*-- Hardware Serial
#define _baudrate   9600

//*-- Software Serial
//
#define _rxpin 2
#define _txpin 3
SoftwareSerial debug(_rxpin,_txpin); // RX, TX

//*-- DHT11
#define _dhtpin   8
#define _dhttype    DHT11

DHT dht11( _dhtpin, _dhttype );
uint8_t dhtbuf;

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

// GET /update?key=&field1=&filed2=...;
String GET = "GET /update?key=0VD8RROGTK2MTIFT";

void setup() {
    Serial.begin( _baudrate );
    debug.begin( _baudrate );

    sendDebug("AT");
    delay(5000);
    if(Serial.find("OK"))
    {
      debug.println("RECEIVED: OK\nData ready to sent!");
      connectWiFi();
    }

    // DHT11
    dht11.begin();

    pinMode( _ledpin, OUTPUT );
    digitalWrite( _ledpin, LOW );
}

void loop() {
    dhtbuf = dht11.readHumidity();
    dhtbuf = dht11.readTemperature();


    if( isnan(dhtbuf) || isnan(dhtbuf) )
    {
      debug.println( "Failed to read form DHT11" );
    }
    else
    {
      digitalWrite( _ledpin, HIGH );
      char buf;
      String HH, TT;
      buf = 0x30 + dhtbuf / 10;
      buf = 0x30 + dhtbuf % 10;
      TT = (String(buf)).substring( 0, 2 );
      buf = 0x30 + dhtbuf / 10;
      buf = 0x30 + dhtbuf % 10;
      HH = (String(buf)).substring( 0, 2 );

      updateDHT11( TT, HH );
      #ifdef DEBUG
            debug.print("Humidity: ");
            debug.print( HH );
            debug.print(" %\t");
            debug.print("Temperature: ");
            debug.print( TT );
            debug.println(" *C\t");
      #endif
      digitalWrite( _ledpin, LOW );
    }

    delay(6000);   // 6second
}

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

    cmd = GET + "&field1=" + T + "&field2=" + H +"\r\n";
    Serial.print( "AT+CIPSEND=" );
    Serial.println( cmd.length() );
    if(Serial.find( ">" ) )
    {
      debug.print(">");
      debug.print(cmd);
      Serial.print(cmd);
    }
    else
    {
      sendDebug( "AT+CIPCLOSE" );
    }
    if( Serial.find("OK") )
    {
      debug.println( "RECEIVED: OK" );
    }
    else
    {
      debug.println( "RECEIVED: Error\nExit2" );
    }
}

void sendDebug(String cmd)
{
    debug.print("SEND: ");
    debug.println(cmd);
    Serial.println(cmd);
}

boolean connectWiFi()
{
    Serial.println("AT+CWMODE=1");
    delay(2000);
    String cmd="AT+CWJAP=\"";
    cmd+=SSID;
    cmd+="\",\"";
    cmd+=PASS;
    cmd+="\"";
    sendDebug(cmd);
    delay(5000);
    if(Serial.find("OK"))
    {
      debug.println("RECEIVED: OK");
      return true;
    }
    else
    {
      debug.println("RECEIVED: Error");
      return false;
    }

    cmd = "AT+CIPMUX=0";
    sendDebug( cmd );
    if( Serial.find( "Error") )
    {
      debug.print( "RECEIVED: Error" );
      return false;
    }
}

序列埠監控視窗的訊息
http://2cat.or.tl/~scribe/2prog/src/1468758315888.jpg


之前版上有版友也提問過類似的問題
但參考其作法將TXRX 改接 0和1 問題依舊無解
http://www.robofun.net/forum/thread-10017-1-2.html

超新手 發表於 2016-7-20 11:57:58

很奇怪?
如果你是參考此網站的實驗流程:
http://ruten-proteus.blogspot.tw/2014/11/internet-of-thing-arduino-esp8266.html
它上面的電路明明是接 0 和 1(而且用了 5 V 轉 3.3 的電路)
從程式來看, 也是接0 和 1

MIZUKI 發表於 2016-7-20 15:37:56

本帖最後由 MIZUKI 於 2016-7-20 17:46 編輯

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

而另一方面,按照原作者的佈線電路圖
Level Shifter3V3 / 5V 轉換模組指的是指底下這種元件?#它有型號上的分別嗎?
http://img.alibaba.com/img/pb/639/241/647/647241639_842.jpg

若在手邊沒有3V3 / 5V 轉換模組可以利用的情況下,還有其他的方式可以克服使其運作嗎?

超新手 發表於 2016-7-20 17:17:15

本帖最後由 超新手 於 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:59

本帖最後由 超新手 於 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:00

本帖最後由 MIZUKI 於 2016-7-20 17:43 編輯

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

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

3) 這個key 0VD8RROGTK2MTIFT是你自己的嗎?
>>是的
真正傳給ESP8266的是用 SERIAL, 也就是 0, 1
>>恍然大悟{:3_104:}
頁: [1]
查看完整版本: 懇請教 Arduino使用 ESP8266 Wi-Fi上傳資料遭遇的問題