Stránka 1 z 3
Wifi webserver
Napsal: 05 říj 2017, 21:23
od Arnost
Ahojte,
potřeboval bych pomoct s vytvořením web serveru na ESP 8266 + 2560, mám kód programu, který by měl fungovat ale nedaří se mně provést kompilaci. Stále mně píše, že nemám deklarovanou WL_MAC_ADDR_LENGTH, knihovny si myslím, že používám standardní co jsem našel na netu (zkoušeno už několik bez úspěchu). Nevíte někdo jak tento problém odstranit. Děkuji za pomoc a přikládám část kódu.
Kód: Vybrat vše
void setupWiFi(){
WiFi.mode(WIFI_AP);
uint8_t mac[WL_MAC_ADDR_LENGTH];
WiFi.softAPmacAddress(mac);
String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
macID.toUpperCase();
String AP_NameString = "ESP8266 Thing " + macID;
char AP_NameChar[AP_NameString.length() + 1];
memset(AP_NameChar, 0, AP_NameString.length() + 1);
for (int i=0; i<AP_NameString.length(); i++){
AP_NameChar[i] = AP_NameString.charAt(i);
}
WiFi.softAP(AP_NameChar, WiFiAPPSK);
}
Re: Wifi webserver
Napsal: 05 říj 2017, 22:50
od Arnost
Tak už jsem možná našel kde je zakopaný pes, delší dobu jsem už neprogramoval tak jsem si ještě zkusil nahrát poslední verzi Arduina, ale zase se mně nedaří kompilace. Háže to chybu s tím statusem 1, na netu jsem dopátral, že mám někde něco nahrát ale nevím co přesně, pomůže mně někdo? Dík
G:\dfgsdf\sketch_oct05a\sketch_oct05a.ino:1:25: fatal error: ESP8266WiFi.h: No such file or directory
#include <ESP8266WiFi.h>
^
compilation terminated.
exit status 1
Nastala chyba při kompilaci u desky Arduino/Genuino Mega or Mega 2560.
Re: Wifi webserver
Napsal: 06 říj 2017, 06:58
od zbysek
Teď mě napadá, jestli nebude problém v tom, ze mícháte dohromady dva přístupy, jak pracovat s ESP.
Jeden je, že ESP ovladate přes AT příkazy z Arduino, druhý, že programujete přímo ESP.
ESP8266Wifi.h je knihovna pro programování ESP přímo. Vy ale program nahráváte do Arduina, ne?
Re: Wifi webserver
Napsal: 06 říj 2017, 11:59
od Arnost
No já se nyní snažím rozjet ten kód na Jednoduchý webserver a nejde mně zkompilovat. Předpokládám, že kód bude fungovat jak potřebuju jen ho nemůžu kvůli té kompilaci rozjet a zobrazuje mně to ten status jedna. Na netu jsem dohledal nějaký problém se špatnýma knihovnami ale dál už nevím.
Princip by měl byt takový, že se mně nastaví pomocí knihovny ESP8266 wifi a pak se mně přes Wifiserver bude zobrazovat ta stránka.
Re: Wifi webserver
Napsal: 06 říj 2017, 12:14
od zbysek
Dobrý den,
vy vycházíte z kapitoly o ESP8266 v knížce "Průvodce světem Arduina".
Problém je v tom, že jste si vzal příklad, který je určený pro desku ESP8266 Thing, která není jako klasické Arduino. Jejím procesorem je právě ESP8266.
Vy jste tento kód vzal a snažíte se ho nahrát přímo do Arduina. To ale nejde.
ESP, které vám přijde od výrobce, má v sobě v základu nahraný firmware, který umožňuje desku ovládat pomocí AT příkazů. Vy musíte do Arduina nahrát program, který bude AT příkazy do ESP posílat. Tomu se věnuje odstavec "Vytváříme server" ve stejné kapitole.
Druhou možnost, kterou máte, je programovat přímo ESP. Potom můžete vybraný program použít, ale musíte si k tomu koupit/postavit programátor pro ESP.
Re: Wifi webserver
Napsal: 07 říj 2017, 20:02
od Arnost
Ano, máte pravdu použil jsem špatný kód omlouvám se. Teď jsem použil ale správný Vytváříme server (snad je to ten správný). Musel jsem provést menší úpravu zápisu z:
Kód: Vybrat vše
cmd = "AT+CWSAP="ESP-WIFI","12345678",11,2";
na
Kód: Vybrat vše
cmd = "AT+CWSAP=\"ESP-WIFI\",\"12345678\",11,2";
Dále jsem upravil příkaz z:
na
Protože předpokládám, že ten port by tam měl být nastavený. Zde ale mé vědomosti končí, nevím jak zobrazit stránku pokud se někdo připojí. Připojím se na ESP-WIFI, pak zadám IP 192.168.11.11 a stránka se dlouze načítá a nic. Určitě tam někde něco chybí.
Ještě k nastavení pomocí AT příkazů, na příkaz AT+CIFSR nedostanu žádnou odpověď tak nevím zda je to dobře nebo špatně.
Re: Wifi webserver
Napsal: 10 říj 2017, 21:08
od Arnost
Ahojte, myslíte že my mně někdo dokázal pomoct spojit následující dva programy v jeden?
Tento slouží k připojení k wifi síti a vytvoření web serveru:
Kód: Vybrat vše
/*
Arduino Due - ESP 8266 WiFi Module
Serial (Tx/Rx) communicate to PC via USB
Serial3 (Tx3/Rx3) connect to ESP8266
Tx3 - ESP8266 Rx
Rx3 - ESP8266 Tx
ESP8266 CH_PD Connect to ESP8266 VCC
*/
#define ASCII_0 48
#define ESP8266 Serial3
String SSID = "MojeWifi";
String PASSWORD = "123456789";
int LED = 13;
boolean FAIL_8266 = false;
String strHTML;
String strHTMLstart = "<!doctype html>\
<html>\
<head>\
<title>";
String strHTMLend ="</title>\
</head>\
<body>\
<H1>Ahoj Lidi</H1>\
</body>\
</html>";
void htlmcode(){
strHTML = "";
strHTML = strHTML + millis() + strHTMLend;
}
boolean cwJoinAP()
{
String cmd="AT+CWJAP=\"" + SSID + "\",\"" + PASSWORD + "\"";
ESP8266.println(cmd);
return waitOKfromESP8266(10);
}
void setup() {
pinMode(LED, OUTPUT);
do{
Serial.begin(115200);
ESP8266.begin(115200);
//Wait Serial Monitor to start
while(!Serial);
Serial.println("--- Start ---");
ESP8266.println("AT+RST");
delay(1000);
if(ESP8266.find("ready"))
{
Serial.println("Module is ready");
ESP8266.println("AT+CWMODE=1");
delay(2000);
//Quit existing AP, for demo
Serial.println("Quit AP");
ESP8266.println("AT+CWQAP");
delay(1000);
clearESP8266SerialBuffer();
if(cwJoinAP())
{
Serial.println("CWJAP Success");
FAIL_8266 = false;
delay(3000);
clearESP8266SerialBuffer();
//Get and display my IP
sendESP8266Cmdln("AT+CIFSR", 1000);
//Set multi connections
sendESP8266Cmdln("AT+CIPMUX=1", 1000);
//Setup web server on port 80
sendESP8266Cmdln("AT+CIPSERVER=1,80",1000);
Serial.println("Server setup finish");
}else{
Serial.println("CWJAP Fail");
delay(500);
FAIL_8266 = true;
}
}else{
Serial.println("Module have no response.");
ESP8266.println("AT+RST");
delay(3000);
FAIL_8266 = true;
}
}while(FAIL_8266);
digitalWrite(LED, HIGH);
}
void loop(){
if(ESP8266.available())
{
Serial.println("Something received");
delay(1000);
if(ESP8266.find("+IPD,"))
{
String action;
Serial.println("+IPD, found");
int connectionId = ESP8266.read()-ASCII_0;
Serial.println("connectionId: " + String(connectionId));
htlmcode();
sendHTTPResponse(connectionId, strHTML);
//Close TCP/UDP
String cmdCIPCLOSE = "AT+CIPCLOSE=";
cmdCIPCLOSE += connectionId;
sendESP8266Cmdln(cmdCIPCLOSE, 1000);
}
}
}
void sendHTTPResponse(int id, String content)
{
String response;
response = "HTTP/1.1 200 OK\r\n";
response += "Content-Type: text/html; charset=UTF-8\r\n";
response += "Content-Length: ";
response += content.length();
response += "\r\n";
response +="Connection: close\r\n\r\n";
response += content;
String cmd = "AT+CIPSEND=";
cmd += id;
cmd += ",";
cmd += response.length();
Serial.println("--- AT+CIPSEND ---");
sendESP8266Cmdln(cmd, 1000);
Serial.println("--- data ---");
sendESP8266Data(response, 1000);
}
boolean waitOKfromESP8266(int timeout)
{
do{
Serial.println("wait OK...");
delay(1000);
if(ESP8266.find("OK"))
{
return true;
}
}while((timeout--)>0);
return false;
}
//Send command to ESP8266, assume OK, no error check
//wait some time and display respond
void sendESP8266Cmdln(String cmd, int waitTime)
{
ESP8266.println(cmd);
delay(waitTime);
clearESP8266SerialBuffer();
}
//Basically same as sendESP8266Cmdln()
//But call ESP8266.print() instead of call ESP8266.println()
void sendESP8266Data(String data, int waitTime)
{
ESP8266.print(data);
delay(waitTime);
clearESP8266SerialBuffer();
}
//Clear and display Serial Buffer for ESP8266
void clearESP8266SerialBuffer()
{
Serial.println("= clearESP8266SerialBuffer() =");
while (ESP8266.available() > 0) {
char a = ESP8266.read();
Serial.write(a);
}
Serial.println("==============================");
}
Tento slouží k vytvoření AP:
Kód: Vybrat vše
char ssid[] = "ssid-site"; //SSID wifi sítě
char pwd[] = "heslo-site"; //heslo sítě
String cmd; //řetězec pro ukládání a skládání příkazů
String http;
void setup(){
Serial.begin(115200);
Serial3.begin(115200); //9600, 57600, 115200
cmd = "AT";
command(cmd, "Zkousim pritomnost modulu", "Modul komunikuje",
"Modul nekomunikuje", "OK", 3000);
cmd = "AT+RST";
command(cmd, "Restartuji modul", "Modul restartovan", "Modul se nepovedlo restartovat", "ready", 5000);
cmd = "AT+CIPMUX=1";
command(cmd, "Nastavuji vicenasobne pripojeni", "Nastaveno", "Nepovedlo se nastavit", "OK", 1000);
cmd = "AT+CWMODE=3";
command(cmd, "Nastavuji AP mod", "Nastaveno", "Nepovedlo se nastavit", "OK", 2000);
cmd = "AT+CWSAP=\"ESP-WIFI\",\"12345678\",8,3";
command(cmd, "Vytvarim pristupovy bod", "Vytvoreno", "Nepovedlo se vytvorit pristupovy bod", "OK", 3000);
cmd = "AT+CIPSERVER=1,80";
command(cmd, "Vytvarim server", "Vytvoreno", "Nepovedlo se vytvoritserver", "OK", 2000);
cmd = "AT+CIFSR";
command(cmd, "Zjistuji aktualni adresu", "", "", "", 2000);
}
void loop(){
if(waitFor("+IPD", 50)){ //hledej výskyt +IPD
Serial3.parseInt(); //jedno číslo zahoď
Serial3.parseInt(); //druhé číslo zahoď
int p = Serial3.parseInt(); //přečti třetí číslo
Serial.print("Nacetl jsem: ");
Serial.println(p);
Serial3.flush(); //zbytek zpravy me ted nezajima, zahod ho
}
resendData();
}
boolean command(String cmd, String comment, String success, String
unsuccess, char *waitForString, long waitingTime){
Serial.println();
Serial.println(comment);
Serial.println("] " + cmd);
Serial3.println(cmd);
boolean result = waitFor(waitForString, waitingTime);
if(result){
Serial.println("[ " + success);
}
else{
Serial.println("[ " + unsuccess);
}
resendData();
return result;
}
boolean waitFor(char *s, long waitingTime){
Serial3.setTimeout(waitingTime);
return Serial3.find(s);
}
boolean resendData(){
while(Serial.available()){
Serial3.write(Serial.read());
}
if(Serial3.available()){
while(Serial3.available()){
Serial.write(Serial3.read());
}
}
}
Oba kódy by měli fungovat zkoušel jsem, ale nevím jak docílit souběžného běhu, aby se mně vytvořilo AP a zároveň na něm vysílat server. Hlavně si nevím s nastavením modulu a severu jako takového.
Děkuji moc za pomoc.
Re: Wifi webserver
Napsal: 10 říj 2017, 21:30
od SkullKeep
Asi nepomuzu moc ,ale zkus tady --->
http://easycoding.tn/tuniot/demos/code/ to je graficke rozhrani na programovani ESP8266 a na youtube najdes video tutorialy. link --->
https://www.youtube.com/watch?v=5PGZb-v ... cKKOisMUZ1
Re: Wifi webserver
Napsal: 15 říj 2017, 12:03
od colos3453
chtěl bych se zeptat, jak by šel udělat teploměr přes ESP8266 modul wifi teploměr, ale přes acces point. Ani jeden z mých pokusů nefunguje.
Díky za odpověď
Re: Wifi webserver
Napsal: 15 říj 2017, 14:39
od SkullKeep
Rad pomohu ,ale neni videt tvuj kod.