iemand al gespeeld met de ESP8266 module?

Hardware / electronica onderwerpen
Gebruikers-avatar
Berichten: 4801
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

iemand al gespeeld met de ESP8266 module?

Berichtdoor nicoverduin » 06 Sep 2014, 18:04

Hi,

Voor zover nog niet bekend. Er is een nieuwe WiFi module uitgekomen met de ESP8266 chip. De eerste waren al vrijwel gelijk uitverkocht bij SeeedStudio. Ik heb er net 5 besteld op AliExpress. Volgens die chinees hadden ze die op voorraad. Nu zijn mijn ervaringen met aliExpress tot op heden uitstekend. Dus ben benieuwd. Heb er gelijk maar 5 besteld.... kosten 3.40 euro per stuk. :mrgreen:

Als ik alle berichten moet geloven beloofd dit wel een doorbraak in de Internet-Of-Things mogelijkheden. http://hackaday.com/2014/08/26/new-chip ... ule-its-5/

Voor de beginners.... Het staat je vrij... maar dit is nog echt in de kinderschoenen......
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

Gebruikers-avatar
Berichten: 4801
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor nicoverduin » 27 Sep 2014, 16:14

Nou ik heb er 5 binnen gekregen. Duidelijk nog in de kinderschoene :). Maar..... Inmiddels heb ik een verbinding kunnen leggen met de module en kan verbinden met mijn Router thuis.... Dat is stap 1 :). Nu nog kijken hoe ik externe kan verbinden. Overigens alles nog gewoon met een TTL-232R-3V3 kabel en dan via de Serial monitor. Dan hoef ik niet te emmeren met 3.3V.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 4801
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor nicoverduin » 28 Sep 2014, 15:27

Nou hij werkt dus !!!! Met wat gepiel onderstaande code gebruikt (nog niet voldoende om apps mee te bouwen :)) maar ik kan inderdaad een verbinding leggen met een externe weer web site:

de code tot op heden
cpp code
//
// libraries
//
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "JsonParser.h"
using namespace ArduinoJson::Parser;

//
// global defines
//
#define SSID "SSID" // WiFi lan at home
#define PASS "SSID_PW" // password for WiFi lan
#define CONNECT_RETRIES 5 // allow 5 retries to connect to WiFi

#define DST_IP "188.226.224.148" //baidu.com
#define LOCATIONID "2925533" // location id

#define DEBUG_RX 10 // pin 10 is used for receiving input from debug serial
#define DEBUG_TX 11 // pin 11 is used for sending output to debug serial

SoftwareSerial dbgSerial(DEBUG_RX, DEBUG_TX); // used for debugging
JsonParser<32> parser;
//
// function prototypes
//
boolean connectWiFi(); // function to connect to WiFi

//
// global variables
//
char cmd[100]; // buffer used build messages
char buffer[100];
/**
* @name setup()
* initialize the program
*/
void setup() {
//
// Open serial communication with WiFi module
//
Serial.begin(115200);
Serial.setTimeout(5000);
//
// open debug serial
//
dbgSerial.begin(9600); //can't be faster than 19200 for softserial
dbgSerial.println("ESP8266 Demo"); // show demo is starting
//
//test if the module is ready
//
bool moduleReady = false;
for (uint8_t i = 0; i < CONNECT_RETRIES; i++){
Serial.println("AT+RST"); // reset the module
delay(1000);
if (Serial.find("OK")) {
//
// the module is ready to receive commands
//
dbgSerial.println("Module is ready");
moduleReady = true;
break;
} else {
dbgSerial.println("Module is not responding");
}
}
if (!moduleReady) {
//
// module is not responding
//
dbgSerial.println("Module non functional.");
while (1){}; // loop forever as we cannot connect
}
// delay(1000);
//
// now connect to the wifi
//
boolean connected = false;
for (int i = 0; i < CONNECT_RETRIES; i++) {
//
// check if we are connected
//
if (connectWiFi()) {
//
// we have a connection
//
connected = true;
//
// done
//
break;
}
}
//
// if we cannot connect no use continuing
//
if (!connected) {
//
// inform user
//
dbgSerial.println("Cannot connect to WiFi lan");
while (1) {};
}

delay(5000);
//
// show the IP address we have received
//
Serial.println("AT+CIFSR");
delay(3000);
//
// wait for incoming message with IP address
//
while (!Serial.available()){};
//
// copy the message to output
//
uint16_t bufferIndex = 0;
while (Serial.available()) {
char x = Serial.read();
//
// ignore any CR's, LF's and zero characters
//
if (x != 0x0D && x != 0x0A && x != 0x0) {
//
// add character to buffer
//
buffer[bufferIndex] = x;
bufferIndex++;
}
}
//
// put in a string terminator
//
buffer[bufferIndex] = '\0';
//
// and display the IP address
//
dbgSerial.print("ip address: ");
dbgSerial.println(&buffer[8]);
//
// 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 /data/2.5/weather?id=";
cmd += LOCATIONID;
cmd += " HTTP/1.0\r\nHost: api.openweathermap.org\r\n\r\n";
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
if(Serial.find(">")){
dbgSerial.print(">");
}else{
Serial.println("AT+CIPCLOSE");
dbgSerial.println("connection timeout");
delay(1000);
return;
}
Serial.print(cmd);
unsigned int i = 0; //timeout counter
int n = 1; // char counter
char json[100]="{";
while (!Serial.find("\"main\":{")){} // find the part we are interested in.
while (i<60000) {
if(Serial.available()) {
char c = Serial.read();
json[n]=c;
if(c=='}') break;
n++;
i=0;
}
i++;
}
dbgSerial.println(json);
JsonObject root = parser.parse(json);
double temp = root["temp"];
double pressure = root["pressure"];
double humidity = root["humidity"];
temp -= 273.15; // from kelvin to degree celsius
dbgSerial.println(temp);
dbgSerial.println(pressure);
dbgSerial.println(humidity);
dbgSerial.println("====");
delay(600000);
}
boolean connectWiFi() {
Serial.println("AT+CWMODE=1");
strcpy(cmd,"AT+CWJAP=\"");
strcat(cmd,SSID);
strcat(cmd, "\",\"");
strcat(cmd, PASS);
strcat(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;
}
}


En de resultaten via Software serial

cpp code
ESP8266 Demo
Module is ready
AT+CWJAP="SSID","SSID_PW"
Can not connect to the WiFi.
AT+CWJAP="SSID","SSID_PW"
OK, Connected to WiFi.
ip address: 10.0.0.17
AT+CIPSTART="TCP","188.226.224.148",80
>{"temp":293.54,"pressure":1024,"humidity":64,"temp_min":292.15,"temp_max":295.05}
20.39
1024.00
64.00
====


Wel een zeer interessante module omdat de prijs zo laag is dat het gemakkelijk in een apparaat thuis (IoT : Internet of Things) achtergelaten kan worden. Voor die US$ 4-5 hoef je het niet te laten. Denk niet dat je nu gelijk hele webpagina's kan binnen halen... De interface met de module is "slechts" 115200 baud. Ik denk dat het pas echt snel wordt als ze een module met SPI uitbrengen. Maar voor eenvoudige schakeltoepassingen met web verbinding is die zonder meer te doen...

Volgende stap:
- eerst maar eens kijken of ik de modulae kan laten praten met een Ethernet Servertje die in mijn LAN komt te hangen.
- Daarna via een APP een ledje (of relais) ga sturen vanuit een eenvoudige app.
- en dan is het klaar voor een mooi domotica project :) inclusief beveiligde WPA2 :)
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 4801
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor nicoverduin » 30 Sep 2014, 23:14

Ik ben weer een paar stapjes verder....
Inmiddels achterhaald hoe je de firmware kan upgraden. De eerste versie was nog via een speciale flash loader. Met de nu ingestalleerde versie kan ik nu via de cloud updaten... En mijn eerste telnet verbinding tot stand gekregen. Gaaf moduletje..... Moet nu wel 5 x de firmware updaten $%$#$%^&*()(*&^%$
Zag tevens dat Atmel en Arduino een nieuwe miniatuur Wifi shield 101 hebben/gaan geannonceerd. Ze kunnen immers niet achterblijven :) zie: http://hackaday.com/2014/09/30/atmel-an ... ker-faire/
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 10
Geregistreerd: 02 Okt 2014, 15:12

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor jeroen2 » 02 Okt 2014, 16:09

Hoi Nico.

Mooi werk! Ik heb vandaag 2 units binnengekregen, ben benieuwd of ik er wat mee kan, ga dit weekend ploeteren :)
Hoe heb je m precies aangesloten? Ik zag deze wiki http://www.seeedstudio.com/wiki/WiFi_Se ... ver_Module maar begrijp niet waar die SBEE voor nodig is. je kunt die ESP8266 toch gewoon direct op je Arduino aansluiten zonder dat je iets extra's nodig hebt?

En had jij nog last van wat ze in dat artikel zeggen over de verschillende snelheden van de Software Serial en de hardware serial waar de wifi module op is aangesloten?

Berichten: 10
Geregistreerd: 02 Okt 2014, 15:12

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor jeroen2 » 02 Okt 2014, 16:10

Oh, en zou je willen delen hoe je die firmware kunt updaten?

Gebruikers-avatar
Berichten: 4801
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor nicoverduin » 02 Okt 2014, 19:19

jeroen,
Ik gebruik gewoon een TTL-232 kabel. In mijn geval: TTL-232R-5V en dan een buck convertje om er 3.3V van te maken. Tutti ebay :)
Upgraden van de module zie: http://blog.electrodragon.com/cloud-upd ... p8266-now/
Daar gebruiken ze ook een soort TTL-232 kabeltje. Zo'n kabel zet TTL RS232 signalen om in USB. En dan kan je er gewoon bij met een terminal programma (of de Seriale monitor)

Mijn aanpak was:
- eerst zo'n demo programma via de arduino, maar dan heb je het nadeel dat je de serieel niet kan gebruiken omdat de module die gebruikt. Dus moet je software serial gebruiken als je iets wilt zien op de Serial monitor. En dan zo'n heb je dus een TTL-232 kabeltje nodig.
- Toen bedacht ik dat ik die hele Arduino nog niet nodig had omdat je via de Serial Monitor ook rechtstreeks met die module kan praten om te kijken hoe het werkt. Dus gewoon met het kabeltje op de USB en dan via Serial Monitor er mee babbelen via de AT comando's.
- Een alternatief is natuurlijk een Mega2560. Die heeft meerdere hardware Serial poorten. Ik was gewoon te beroerd om dat ding op te zoeken :).
- Toen ik het een beetje in de vingers kreeg heb ik ff dit test programma'tje gemaakt:
cpp code
//
// libraries
//
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "JsonParser.h"
#include <avr/wdt.h>


using namespace ArduinoJson::Parser;

//
// global defines
//
#define SSID "XXXXXX" // WiFi lan at home
#define PASS "XXXXXX" // password for WiFi lan
#define CONNECT_RETRIES 5 // allow 5 retries to connect to WiFi

#define DST_IP "www.verelec.com" //baidu.com
//#define DST_IP "188.226.224.148" //baidu.com
#define LOCATIONID "2925533" // location id

#define DEBUG_RX 10 // pin 10 is used for receiving input from debug serial
#define DEBUG_TX 11 // pin 11 is used for sending output to debug serial

SoftwareSerial dbgSerial(DEBUG_RX, DEBUG_TX); // used for debugging
JsonParser<32> parser;
//
// function prototypes
//
boolean connectWiFi(); // function to connect to WiFi
void software_Reboot();

//
// global variables
//
char cmd[100]; // buffer used build messages
char buffer[100];
/**
* @name setup()
* initialize the program
*/
void setup() {
//
// Open serial communication with WiFi module
//
Serial.begin(115200);
Serial.setTimeout(5000);
//
// open debug serial
//
dbgSerial.begin(9600); //can't be faster than 19200 for softserial
dbgSerial.println("ESP8266 Demo"); // show demo is starting
//
//test if the module is ready
//
bool moduleReady = false;
for (uint8_t i = 0; i < CONNECT_RETRIES; i++){
Serial.println("AT+RST"); // reset the module
delay(1000);
if (Serial.find("OK")) {
//
// the module is ready to receive commands
//
dbgSerial.println("Module is ready");
moduleReady = true;
break;
} else {
dbgSerial.println("Module is not responding");
}
}
if (!moduleReady) {
//
// module is not responding
//
dbgSerial.println("Module non functional.");
//
// reboot and try again
//
software_Reboot();
}
delay(1000);
//
// set mode = 1
//
Serial.println("AT+CWMODE=1");
delay(1000);
Serial.println("AT+CWMODE?");
delay(3000);
while(Serial.available()) {
dbgSerial.write(Serial.read());
}

//
// now connect to the wifi
//
boolean connected = false;
for (int i = 0; i < CONNECT_RETRIES; i++) {
//
// check if we are connected
//
if (connectWiFi()) {
//
// we have a connection
//
connected = true;
//
// done
//
break;
}
}
//
// if we cannot connect no use continuing
//
if (!connected) {
//
// inform user
//
dbgSerial.println("Cannot connect to WiFi lan");
while (1) {};
}
delay(5000);
//
// show the IP address we have received
//
Serial.println("AT+CIFSR");
delay(3000);
//
// wait for incoming message with IP address
//
while (!Serial.available()){};
//
// copy the message to output
//
uint16_t bufferIndex = 0;
while (Serial.available()) {
char x = Serial.read();
//
// ignore any CR's, LF's and zero characters
//
if (x != 0x0D && x != 0x0A && x != 0x0) {
//
// add character to buffer
//
buffer[bufferIndex] = x;
bufferIndex++;
}
}
//
// put in a string terminator
//
buffer[bufferIndex] = '\0';
//
// and display the IP address
//
dbgSerial.print("ip address: ");
dbgSerial.println(&buffer[8]);
//
// show CIPStatus
//
Serial.println("AT+CIPSTATUS");
delay(3000);
while(Serial.available()) {
dbgSerial.write(Serial.read());
}

//
// set the single connection mode
//
Serial.println("AT+CIPMUX=1");

//
// go into server mode
//
Serial.println("AT+CIPSERVER=1,80");
delay(3000);
while(Serial.available()) {
dbgSerial.write(Serial.read());
}
}
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 /data/2.5/weather?id=";
cmd = "GET /";
// cmd = "index.ph";
// cmd += LOCATIONID;
cmd += " HTTP/1.0\r\nHost: www.verelec.com\r\n\r\n";
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
if(Serial.find(">")){
dbgSerial.print(">");
}else{
Serial.println("AT+CIPCLOSE");
dbgSerial.println("connection timeout");
delay(1000);
return;
}
while (Serial.available()) {
dbgSerial.write(Serial.read());
}
// Serial.print(cmd);
// unsigned int i = 0; //timeout counter
// int n = 1; // char counter
// char json[100]="{";
// while (!Serial.find("\"main\":{")){} // find the part we are interested in.
// while (i<60000) {
// if(Serial.available()) {
// char c = Serial.read();
// json[n]=c;
// if(c=='}') break;
// n++;
// i=0;
// }
// i++;
// }
// dbgSerial.println(json);
// JsonObject root = parser.parse(json);
// double temp = root["temp"];
// double pressure = root["pressure"];
// double humidity = root["humidity"];
// temp -= 273.15; // from kelvin to degree celsius
// dbgSerial.println(temp);
// dbgSerial.println(pressure);
// dbgSerial.println(humidity);
// dbgSerial.println("====");
// delay(30000);
}
boolean connectWiFi() {
Serial.println("AT+CWMODE=1");
strcpy(cmd,"AT+CWJAP=\"");
strcat(cmd,SSID);
strcat(cmd, "\",\"");
strcat(cmd, PASS);
strcat(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;
}
}
void software_Reboot()
{
wdt_enable(WDTO_15MS);
while(1)
{
}
}

Duidelijk dat dit een freubel programma is. Met het servertje startte prima op. En zo gewoon stapje voor stapje.
Verder kreeg ik vandaag een bericht binnen dat ze inmiddels geslaagd zijn in het draaien van de GCC compiler voor de ESP8266. En dan komt de Eclipse omgeving wel heel dicht bij.
zie: http://hackaday.com/2014/10/02/gcc-for- ... fi-module/
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 4801
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor nicoverduin » 02 Okt 2014, 20:27

Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 10
Geregistreerd: 02 Okt 2014, 15:12

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor jeroen2 » 03 Okt 2014, 10:46

Ha dat klinkt goed allemaal! Ik heb gisteren idd zo'n mega (kloon) besteld, die heeft meer UARTs idd, en dat leek me wel prettig, vooral voor debuggen via serial monitor idd. EN ik heb het idee dat je dan ook meer mogelijkheden krijgt om de arduino te laten "slapen" en hem "wakker" te laten worden als hij via zo'n UART iets binnen krijgt.

Die mega zal nog wel weken op zich laten wachten want komt iets China. Dus jouw ervaringen van hierboven zijn erg nuttig, dank!!

Gebruikers-avatar
Berichten: 4801
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: iemand al gespeeld met de ESP8266 module?

Berichtdoor nicoverduin » 03 Okt 2014, 11:43

Nou ik zit eigenlijk al te wachten dat je die chippies los kan krijgen. Zou mooi zijn om die te integreren op een PCB met een 328P. Echter ik begrijp dat het antenne verhaal nog iets apart is :). Maar ja stapjes tegelijk :)
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar ESP Hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast