懇請教 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 很奇怪?
如果你是參考此網站的實驗流程:
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 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: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: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:43 編輯
1) 所以這是你的 wifi
>>是的 (因為我想表達完整的程式碼所以就保留下來了
2>你有試著用 pc 的瀏灠器(如ie)連到
>>有,可以
3) 這個key 0VD8RROGTK2MTIFT是你自己的嗎?
>>是的
真正傳給ESP8266的是用 SERIAL, 也就是 0, 1
>>恍然大悟{:3_104:}
頁:
[1]