irgendwie komme ich da nicht weiter
mein Test aufbau:
http://www.seeedstudio.com/wiki/WiFi_Seri…nsceiver_Module
wie hier beschrieben.
leider bekomme ich im Putty nur an gezeigt:
Module have no response.
irgendwie komme ich da nicht weiter
mein Test aufbau:
http://www.seeedstudio.com/wiki/WiFi_Seri…nsceiver_Module
wie hier beschrieben.
leider bekomme ich im Putty nur an gezeigt:
Module have no response.
esp8266 + arduino? Schau mal ob du hier fündig wirst!
Zunächst mal ist wichtig Welchen Arduino du verwendest
Dann bitte mit Eigenen Worten beschreiben wie du das Module angeschlossen hast und auch den Sketch, so wie Du ihn hast, posten - um zu verifizieren Wie es Bei Dir aussieht... Denn sehr oft werden kleine aber entscheidene Unterschiede beim User himself vorgenommen - das sollte man also erst mal ausschließen können
Die Verkabelung von RX/TX ist oftmals verwirrend, deshalb hier noch mal:
Also der TXD vom ESP8266 geht auf den RXD vom Arduino!
es ist ein arduino Mega
Anschluss: esp8266 > mega
vcc <> 3,3V
TXD <> RXD
RXD <> TXD
GND <> GND
CH_PD <> 3,3V
usb to TLL > Mega
TXD <> PIN 11
RXD <> PIN 10
GND <> GND
sketch:
#include <SoftwareSerial.h>
#define SSID "mein SSID"
#define PASS "mein PW"
#define DST_IP "220.181.111.85" //baidu.com
SoftwareSerial dbgSerial(10, 11); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(57600);
Serial.setTimeout(5000);
dbgSerial.begin(9600); //can't be faster than 19200 for softserial
dbgSerial.println("ESP8266 Demo");
//test if the module is ready
Serial.println("AT+RST");
delay(1000);
if(Serial.find("ready"))
{
dbgSerial.println("Module is ready");
}
else
{
dbgSerial.println("Module have no response.");
while(1);
}
delay(1000);
//connect to the wifi
boolean connected=false;
for(int i=0;i<5;i++)
{
if(connectWiFi())
{
connected = true;
break;
}
}
if (!connected){while(1);}
delay(5000);
//print the ip addr
/*Serial.println("AT+CIFSR");
dbgSerial.println("ip address:");
while (Serial.available())
dbgSerial.write(Serial.read());*/
//set the single connection mode
Serial.println("AT+CIPMUX=0");
}
void loop()
{
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
Serial.println(cmd);
dbgSerial.println(cmd);
if(Serial.find("Error")) return;
cmd = "GET / HTTP/1.0\r\n\r\n";
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
if(Serial.find(">"))
{
dbgSerial.print(">");
}else
{
Serial.println("AT+CIPCLOSE");
dbgSerial.println("connect timeout");
delay(1000);
return;
}
Serial.print(cmd);
delay(2000);
//Serial.find("+IPD");
while (Serial.available())
{
char c = Serial.read();
dbgSerial.write(c);
if(c=='\r') dbgSerial.print('\n');
}
dbgSerial.println("====");
delay(1000);
}
boolean connectWiFi()
{
Serial.println("AT+CWMODE=1");
String cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
dbgSerial.println(cmd);
Serial.println(cmd);
delay(2000);
if(Serial.find("OK"))
{
dbgSerial.println("OK, Connected to WiFi.");
return true;
}else
{
dbgSerial.println("Can not connect to the WiFi.");
return false;
}
}
Alles anzeigen
Was soll bei deiner Belegung denn EN sein? Einen solchen Pin gibts am ESP8266 soweit ich weiß gar nicht ?
Laut der Anleitung die du oben angegeben hast sind auch nur 4 Pins am ESP8266 verkabelt, nicht 5 wie bei dir - also wie kommst du darauf 5 Pins zu verkabeln
Und was ist TLL ?
Und schließ den Mega mal bitte an deinen PC an, öffne ArduinoIDE und wenn du den Sketch geflasht hast machst du oben rechts "Serial Monitor" über das kleine Lupensymbol auf. In dem neuen Fenster stellst du dann noch bitte die richtige Baudrate ein - und dann bitte das posten was da ausgegeben wird
(jedesmal wenn du den Serial Monitor auf machst wird der Arduino resettet)
im serial monitor kommt nur AT+RST
TLL: = usb to tll kabel
sellbst wenn ich CH_PD weg lasse kommt nur AT+RST
Vielleicht hast du noch eine alte Firmware drauf - stell mal die Baudrate auf 115200 oder runter auf 9600
Das Module ist aber auch nicht 5V tolerant... Der Arduino Mega2560 ist aber ein 5V Device, es kommt also aus dem TxD Port auch 5V raus.... Das ist also nicht zu prickelnd, da bräuchtest du vermutlich einen LevelShifter (Widerstand)
LevelShifter hab ich hier liegen
nur wie schliesse ich die an?
... als müsste man jeden Levelshifter kennen der so existiert ....
Vermutlich einfach 1:1 ... Port1 von Seiten des Arduinos an Port1 auf der anderen Seite zum ESP8266. Die 5V Seite Richtung Arduino und die 3V3 Seite Richtung ESP8266
levelshifter hab ich jetzt mit dran
CH_PD auch und da leuchtet jetzt eine Blaue LED
Hi,
wie an anderer Stelle versprochen, hier mal meine bisherigen Erkenntnisse in Software gegossen und optisch aufbereitet.
Der sketch im Anhang funktioniert allerdings leider nicht so, wie er soll.
Wenn ich mit einem Kabel direkt auf die Rx/Tx Pins des Moduls gehe, funktionieren alle Kommandos einwandfrei. Wenn ich das aber aus dem sketch heraus mache, dann hängt er beim Verbinden mit dem Host. Den Effekt habe ich übrigens auch mit dem Testprogramm aus dem Netz ...
Ich kann jetzt nicht sagen, woran das liegt ... jedenfalls ist es imho sehr myteriös und erscheint mir nicht logisch.
Der sketch ist ziemlich umfangreich und fragt diverse Sensoren ab. Das sollte aber weiter nicht stören.
Wichtig ist nur das Handling des Moduls.
Hierzu muss ziemlich weit oben im sketch die SSID und das Passwort für das WLAN und die Server-Addresse und der Port eingetragen werden, zu dem ihr verbinden wollt.
Der connect auf das WLAN scheint einwandfrei zu funktionieren ... lediglich die Verbindung zum Server kommt nicht zustande.
Ich denke derzeit darüber nach, den Server auf dem WiFi Modul zu starten, und dann vom RPi aus darauf zu verbinden. Vielleicht klappt das ja eher.
Bei einem MEGA oder einem Arduino mit mehreren UARTS könnt ihr die SoftSerial weglassen und stattdessen eine reale rs232 nehmen. Dazu einfach meine softSerial durch z.B. Serial austauschen und das Modul an Serial1 anschliessen. Dann sollte es auch keine Probleme mit dem Flashen geben.
SoftSerial sollte aber genau so funktionieren. Ich verwende die Pins 8 und 9 dafür.
Der CH_PD Pin muss, wie schon im anderen Thread erwähnt, auf HIGH gesetzt werden. Zusätzlich habe ich den RST Pin angeschlossen und resette das Modul per Software vom Arduino aus, wenn es sich nicht mehldet.
Wenns noch Fragen gibt, melden ....
Wie gesagt, ich baue das mal um auf eine Server-Version. Vielleicht klappt das ja besser.
Ich vermute stark, dass das an meiner Firmware liegt - die ist wohl 902. Aber solange ich kein zweites Modul habe, lasse ich das mit dem Update lieber ...
//EDIT:
Was ich auf der Zeichnung vergessen habe: die Pins 8 und 9 des Arduino gehen über ein PL2303 Kabel auf den USB-Anschluss meines Laptops. Dort läuft dann minicom.
Achtet darauf, dass die SoftwareSerial Schnittstellen lt. diverser Hinweise im Netz nur max. 19200 Baud unterstützt.
UPDATE:
Ich habe den sketch jetzt mal so umgebaut, dass das Modul als Server arbeitet. Erstaunlicherweise hat das auf Anhieb geklappt.
Ist zwar nach wie vor ein absoluter Bastel-Stand der Software ... aber ausbaufähig. Ausserdem wollte ich sie Euch nicht vorenthalten. Der Server-Version ist im Anhang als funksensor_v3.ino.gz.
UPDATE 2 (16.11. 01:30):
Ich hab' jetzt noch ein wenig an der Server-Variante rumgefeilt und den Anhang aktualisiert.
Ich setze jetzt den Timeout für die Verbindung zum Board hoch bzw. runter. Zudem erkennt der sketch jetzt einen Verbindungsabbruch (auflegen des client bzw. sleep modus des Moduls).
Einzig ein Phänomen bekomme ich im Moment nicht gebacken:
Wenn ich einen Datensatz per WLAN schicke, dann zeigt der Wert hinter IPD zwar die richtige Anzahl der Bytes an, aber irgendwie werden maximal 51 Byte Nettodaten empfangen.
Das muss irgendwie mit dem Empfangspuffer dataIn zusammenhängen. Das ist eine Variable vom Typ String ... reserviere ich in setup() für den String 120 byte ( dataIn.reserve(120) ) dann klappt komischerweise die Anmeldung am WLAN nicht mehr ...
Ich muss allerdings dazu sagen, dass der verbleibende RAM nicht sehr üppig ist ...
+IPD,0,52:12345678901234567890123456789012345678901234567890
+IPD,0,2:
Hm ?:
Hm ?: OK
Hm ?:
+IPD,0,53:123456789012345678901234567890123456789012345678901
+IPD,0,2:
Hm ?:
Hm ?: OK
Hm ?:
+IPD,0,54:123456789012345678901234567890123456789012345678901
+IPD,0,2:
Hm ?:
Hm ?: OK
Hm ?:
+IPD,0,55:123456789012345678901234567890123456789012345678901
+IPD,0,2:
Hm ?:
Hm ?: OK
Ach ja: der Server startet auf Port 3366. Testen kann man das z.B. mit Telnet. Das ist derzeit noch hart kodiert ...
Die IP des Moduls müsst ihr bei Eurem Router erfragen ... sinnvollerweise sollte man da eine IP für das Modul reservieren.
cheers,
-ds-
cu,
-ds-
beim kompilieren von funksensor_v2 bekomme ich :
funksensor_v2.ino: In function 'void storeEEPROM()':
funksensor_v2:708: error: 'do_crc16' was not declared in this scope
funksensor_v2.ino: In function 'uint16_t restoreEEPROM()':
funksensor_v2:806: error: 'do_crc16' was not declared in this scope
Arduino version 1.0.6
Hi,
da fehlt Dir noch die CRC16 Lib -> siehe Anhang ...
Einfach im ~/sketchbook/libraries Ordner entpacken und die IDE neu starten. Aber ich denk, das weisst Du eh ...
cu,
-ds-
yes baby es geht
nach DS seiner zeichung und etwas Grips einschalten hier wie ich es mit dem MEGA verbunden habe.
wie ihr seht hab ich die 3,3 V vom mega abgenommen
hier der/die/das ino:
#include <SoftwareSerial.h>
#define SSID "ssid"
#define PASS "pw"
#define DST_IP "220.181.111.85" //baidu.com
SoftwareSerial dbgSerial(10, 11); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
Serial.setTimeout(5000);
dbgSerial.begin(9600); //can't be faster than 19200 for softserial
dbgSerial.println("ESP8266 Demo");
//test if the module is ready
Serial.println("AT+RST");
delay(1000);
if(Serial.find("ready"))
{
dbgSerial.println("Module is ready");
}
else
{
dbgSerial.println("Module have no response.");
while(1);
}
delay(1000);
//connect to the wifi
boolean connected=false;
for(int i=0;i<5;i++)
{
if(connectWiFi())
{
connected = true;
break;
}
}
if (!connected){while(1);}
delay(5000);
//print the ip addr
Serial.println("AT+CIFSR");
dbgSerial.println("ip address:");
while (Serial.available())
dbgSerial.write(Serial.read());
//set the single connection mode
Serial.println("AT+CIPMUX=0");
}
void loop()
{
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",80";
Serial.println(cmd);
dbgSerial.println(cmd);
if(Serial.find("Error")) return;
cmd = "GET / HTTP/1.0\r\n\r\n";
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
if(Serial.find(">"))
{
dbgSerial.print(">");
}else
{
Serial.println("AT+CIPCLOSE");
dbgSerial.println("connect timeout");
delay(1000);
return;
}
Serial.print(cmd);
delay(2000);
//Serial.find("+IPD");
while (Serial.available())
{
char c = Serial.read();
dbgSerial.write(c);
if(c=='\r') dbgSerial.print('\n');
}
dbgSerial.println("====");
delay(1000);
}
boolean connectWiFi()
{
Serial.println("AT+CWMODE=1");
String cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
dbgSerial.println(cmd);
Serial.println(cmd);
delay(2000);
if(Serial.find("OK"))
{
dbgSerial.println("OK, Connected to WiFi.");
return true;
}else
{
dbgSerial.println("Can not connect to the WiFi.");
return false;
}
}
Alles anzeigen
Bauteil für Fritzing Kit :
Hi,
na super :thumbs1:
...
wie ihr seht hab ich die 3,3 V vom mega abgenommen
...
wobei Du da ein wenig aufpassen musst. Das Modul kann ganz schön heftig Strom ziehen (gut 200 mA habe ich da noch im Hinterkopf) ... ich bin mir nicht sicher, ob der Mega das bringt (da ist imho bei 150 mA Schluss) ...
Einfach mal im HInterkopf behalten, wenn's mal hakt ...
Nachdem bei Dir der connect auf einen Server funktioniert, bei mir aber nicht ( ich hab' ja auch den sonderbaren Effekt mit dem fehlerhaftn join bei string.reserve(120) ) tippe ich jetzt mal, dass meinem Pro Mini der Speicher ausgeht und der connect deshalb nicht klappt.
Mal schauen, was ich da mache ... wär halt auf nem Pro Mini schon genial.
cu,
-ds-
was ich mit bekommen habe ist ... dass das esp8266 modul nicht immer 100%ig erkannt wird
Hi,
das kommt wohl vor ... deshalb hab' ich ja den reset per Software eingebaut ...
Es gibt, zumindest bei mir, auch einen sonderbaren Effekt mit den Empfangsdaten (hatte ich ja -> hier <- schon mal beschrieben). Kann aber auch am RAM liegen ...
cu,
-ds-
sorry bin noch nicht soweit, habe erst mal alle 117 LEDs mit fastLED2 am nano am laufen und beginne jetzt mit der Uhr (wordclock)
wlan muss noch warten, dann wird es spannend wie ich ntp da rein bekomme......
Hm wenn das Module so viel Strom zieht, wie soll man das dann am PI betreiben =(
Naja ... mit einem WLAN Stick bist Du ja strommässig auch gut unterwegs ... irgendwo muss die Sendeleistung ja herkommen. Ist doch ein bekanntes Phänomen, dass beim RPi mit einem älteren WLAN Dongle durchaus mal die Spannung wegbricht ...
Die 240 mA (oder so) sind aber scheinbar ein absoluter Spitzenwert ... im Arbeitsmodus bist Du mit ca. 80 mA dabei (das hab' ich nicht gemessen sondern aus irgend einer Webseite).
Ne klar, für die 3V3 des RPi ist das nix ... aber für den gibts ja USB Dongles für WLAN.
Spannend ist das Modul imho eher für µController (ein WLAN Sensor kostet halt dann mit Batterien knapp 10 Euro und passt in eine Streichholzschachtel ...).
Sicher ... die Batterie hält halt nur entsprechend lange (oder kurz) ... aber ich finde es eh affig z.B. Temperatur oder Luftdruck im Sekundentakt zu messen.
cu,
-ds-
Hm wenn das Module so viel Strom zieht, wie soll man das dann am PI betreiben =(
am PI ginge das wie mit jedem anderen wlan Adapter auch nur müsste der Saft von 5V selber zu 3,3V für das Modul gewandelt werden (KIS Pi-Tuning), aber die Überschrift war doch Arduino :s
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!