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 降壓供電的線路
以下為測試的程式代碼
#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[2];
//*-- IoT Information
#define SSID "Tenda_5D1C08"
#define PASS "12345678"
#define IP "184.106.153.149" // ThingSpeak IP Address:api.thingspeak.com
// GET /update?key=[THINGSPEAK_KEY]&field1=[data 1]&filed2=[data 2]...;
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[0] = dht11.readHumidity();
dhtbuf[1] = dht11.readTemperature();
if( isnan(dhtbuf[0]) || isnan(dhtbuf[1]) )
{
debug.println( "Failed to read form DHT11" );
}
else
{
digitalWrite( _ledpin, HIGH );
char buf[3];
String HH, TT;
buf[0] = 0x30 + dhtbuf[1] / 10;
buf[1] = 0x30 + dhtbuf[1] % 10;
TT = (String(buf)).substring( 0, 2 );
buf[0] = 0x30 + dhtbuf[0] / 10;
buf[1] = 0x30 + dhtbuf[0] % 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;
}
}
複製代碼
序列埠監控視窗的訊息
之前版上有版友也提問過類似的問題
但參考其作法 將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