http://hackaday.io/project/2879-ESP8266 ... le-Library
есть даже вот такой
http://ru.aliexpress.com/item/ESP8266-s ... 76105.html
170 рублей
или с чип антенной
форум по этим штукам: http://www.esp8266.com/
даташит:
распиновка модуля:
для запуска модуля необходимо ногу CH_PD соединить с VCC, старая версия модуля этого не требует, её легко определить по отсутствию светодиодов на плате.
экспериментальным путём установлено что вход URXD толерантен к TTL +5v UART, подключил напрямую и ничего не сдохло.
SDK и образ для виртуальной машины со всем необходимум для компиляции http://bbs.espressif.com/viewforum.php?f=5
скетч вебсервера который показывает значение аналогового входа, для ардуины (не тестировал):
http://rayshobby.net/?p=9734
- Код: Выделить всё
/* ====== ESP8266 Demo ======
* Print out analog values
* ==========================
*
* Change SSID and PASS to match your WiFi settings.
* The IP address is displayed to soft serial upon successful connection.
*
* Ray Wang @ Rayshobby LLC
* http://rayshobby.net/?p=9734
*/
// comment this part out if not using LCD debug
#include <SoftwareSerial.h>
SoftwareSerial dbg(7, 8); // using pin 7, 8 for software serial
enum {WIFI_ERROR_NONE=0, WIFI_ERROR_AT, WIFI_ERROR_RST, WIFI_ERROR_SSIDPWD, WIFI_ERROR_SERVER, WIFI_ERROR_UNKNOWN};
#define BUFFER_SIZE 128
#define SSID "your_ssid" // change this to match your WiFi SSID
#define PASS "your_password" // change this to match your WiFi password
#define PORT "8080" // using port 8080 by default
char buffer[BUFFER_SIZE];
void setup() {
Serial.begin(115200);
Serial.setTimeout(5000);
dbg.begin(9600);
dbg.println("begin.");
byte err = setupWiFi();
if (err) {
// error, print error code
dbg.print("setup error:");
dbg.println((int)err);
} else {
// success, print IP
dbg.print("ip addr:");
char *ip = getIP();
if (ip) {
dbg.println(ip);
}
else {
dbg.println("none");
}
maxTimeout();
}
}
bool maxTimeout() {
// send AT command
Serial.println("AT+CIPSTO=0");
if(Serial.find("OK")) {
return true;
} else {
return false;
}
}
char* getIP() {
// send AT command
Serial.println("AT+CIFSR");
// the response from the module is:
// AT+CIFSR\n\n
// 192.168.x.x\n
// so read util \n three times
Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
buffer[strlen(buffer)-1]=0;
return buffer;
}
void loop() {
int ch_id, packet_len;
char *pb;
Serial.readBytesUntil('\n', buffer, BUFFER_SIZE);
if(strncmp(buffer, "+IPD,", 5)==0) {
// request: +IPD,ch,len:data
sscanf(buffer+5, "%d,%d", &ch_id, &packet_len);
if (packet_len > 0) {
// read serial until packet_len character received
// start from :
pb = buffer+5;
while(*pb!=':') pb++;
pb++;
if (strncmp(pb, "GET /", 5) == 0) {
serve_homepage(ch_id);
}
}
}
}
void serve_homepage(int ch_id) {
String header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\nRefresh: 5\r\n";
String content="";
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
content += "analog input ";
content += analogChannel;
content += " is ";
content += sensorReading;
content += "<br />\n";
}
header += "Content-Length:";
header += (int)(content.length());
header += "\r\n\r\n";
Serial.print("AT+CIPSEND=");
Serial.print(ch_id);
Serial.print(",");
Serial.println(header.length()+content.length());
if (Serial.find(">")) {
Serial.print(header);
Serial.print(content);
delay(20);
}
/*Serial.print("AT+CIPCLOSE=");
Serial.println(ch_id);*/
}
byte setupWiFi() {
Serial.println("AT");
if(!Serial.find("OK")) {
return WIFI_ERROR_AT;
}
delay(500);
// reset WiFi module
Serial.println("AT+RST");
if(!Serial.find("ready")) {
return WIFI_ERROR_RST;
}
delay(500);
// set mode 3
Serial.print("AT+CWJAP=\"");
Serial.print(SSID);
Serial.print("\",\"");
Serial.print(PASS);
Serial.println("\"");
delay(2000);
if(!Serial.find("OK")) {
return WIFI_ERROR_SSIDPWD;
}
delay(500);
// start server
Serial.println("AT+CIPMUX=1");
if(!Serial.find("OK")){
return WIFI_ERROR_SERVER;
}
delay(500);
Serial.print("AT+CIPSERVER=1,"); // turn on TCP service
Serial.println(PORT);
if(!Serial.find("OK")){
return WIFI_ERROR_SERVER;
}
delay(500);
return WIFI_ERROR_NONE;
}
большая статья про использование: http://geektimes.ru/post/241054/
утилита для настройки модуля: https://github.com/AppStackTH/ESP8266-Config
прошивка модуля:
Теперь можно и нужно обновить прошивку:
1. Качаем утилиту XTCOM http://rghost.ru/58916556.
2. Качаем прошивку ESP_8266_v0.9.2.2 AT Firmware.bin http://rghost.ru/58916609
3. Отключаем питание платы, вывод GPIO0 соединяем с общим проводом, включаем питание.
4. Запускаем XTCOM_UTIL.exe, переходим в Tools -> Config Device, выбираем COM-порт к которому подключена плата, ставим скорость порта 57600, жмем Open, потом Connect, программа должна сказать «Connect with target OK!», закрываем окно настроек. Переходим в меню API TEST, выбираем (4) Flash Image Download, указываем путь к файлу «ESP_8266_v0.9.2.2 AT Firmware.bin», адрес оставляем 0x00000, жмем DownLoad. Должна начаться загрузка прошивки, по окончании будет выдано сообщение.
5. Отключаем питание платы, вывод GPIO0 отсоединяем от общего провода, включаем питание, запускаем терминал (ВНИМАНИЕ! Меняем скорость порта на 9600), проверяем готовность платы командой AT и версию прошивки командой AT+GMR.
После обновления до версии 0018000902 изменится дефолтная скорость COM-порта с 57600 на 9600, это полезно для софтового уарта.
но эту скорость в новой прошивке теперь можно задать командой AT+CIOBAUD. Смотрим AT+CIOBAUD=? доступные скорости и ставим командой AT+CIOBAUD=115200 скорость 115200, в ответ должно выдать ОК.