Buggfix Plus
Aktuellt datum och tid: 06.01 2018-07-22

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 12 inlägg ] 
Författare Meddelande
 Inläggsrubrik: ESP8266 problem
InläggPostat: 08.11 2017-12-23 

Blev medlem: 20.20 2010-08-30
Inlägg: 2791
Ort: Umeå
jag försöker mig på ett projekt med ESP8266,
syftet är att bygga en knapplåda med en arduino och en ESP8266 som via wifi och socket connect ska få kontakt med en
raspberry pi.
men ack...
har fått igång allt mha exempelprogrammet nedan:

fungerar mot raspen, den kopplar upp och hämtar index.html och skickar ut det på serieporten i klartext.
men efterssom jag även vill ha en webserver på raspen vill jag använda en annan port, t.e.x. 23
som ju är standard telnet...
så jag byter 80 till 23 i koden...
där tar det stopp,
den kopplar upp och allt som den ska men allt den skriver ut är typ:

WiFi connected
IP address:
192.168.10.171
Connected to server
ÿý�ÿý ÿý#ÿý'

ovan är taget från ett likadant problem på nätet där det inte fanns någon lösning på problemet...
min hade inte exakt samma tecken. typ upp och nervända ?

och sedan inget..
vad jag än skickar till raspen kommer inget svar ö.h.t.
jag vill ju ha loginprompt?
för att kunna koppla och typ skicka/ta emot data...
inte säkert mot port 23 och telnet utan en egen socket server...
fast telnet skulle funka för att köra script på raspen att göra det man vill.

vad har jag förbisett?

det funkar givetvis att telnetta in mha en vanlig dator och telnet och att logga in, hur bra som helst,
men icke från ESP8266an...

är det ett teckenkodningsproblem i telnetservern?
då borde det inte gå att telnetta in på port 80 och skicka en GET request som då skriver ut index.html.

vad är det för skillnad mellan socket connects mellan portarna 80 och 23 som jag inte lyckas hitta svar på?


Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
/*
 *  This sketch sends data via HTTP GET requests to data.sparkfun.com service.
 *
 *  You need to get streamId and privateKey at data.sparkfun.com and paste them
 *  below. Or just customize this script to talk to other HTTP servers.
 *
 */

#include <ESP8266WiFi.h>

const char* ssid     = "your-ssid";
const char* password = "your-password";

const char* host = "data.sparkfun.com";
const char* streamId   = "....................";
const char* privateKey = "....................";

void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected"); 
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

int value = 0;

void loop() {
  delay(5000);
  ++value;

  Serial.print("connecting to ");
  Serial.println(host);
 
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
 
  // We now create a URI for the request
  String url = "/input/";
  url += streamId;
  url += "?private_key=";
  url += privateKey;
  url += "&value=";
  url += value;
 
  Serial.print("Requesting URL: ");
  Serial.println(url);
 
  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
 
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
 
  Serial.println();
  Serial.println("closing connection");
}


Senast redigerad av svanted 08.50 2017-12-23, redigerad totalt 2 gånger.

Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 08.18 2017-12-23 
Användarvisningsbild

Blev medlem: 19.48 2013-10-01
Inlägg: 899
Ort: Orust
Ett problem jag ofta ser är att WiFiClient ligger i funktionen loop(). Då kommer tcp/ip anslutningen att kopplar ner för varje "varv".


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 08.30 2017-12-23 

Blev medlem: 20.20 2010-08-30
Inlägg: 2791
Ort: Umeå
jo, men loopen väntar ju på att läsa radslut innan den kopplar ner och går vidare?

och har testat att flytta upp loginfunktionerna i exemplet till "init" och sedan bara vänta på alla tecken som borde komma som svar,
har tyvärr inte koden tillgänglig just nu...

men ALLTID samma krumelurer till svar och sedan stendött,
vad jag än gör...

det är:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
while(client.available()){
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }


som ska läsa svaret och jag har testat med \r\n, \r eller \n
ingen skillnad.

responsen från telnetservern via en telnet klient är ju klartext och inga d-a krumelurer :evil:


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 08.38 2017-12-23 
Användarvisningsbild

Blev medlem: 19.48 2013-10-01
Inlägg: 899
Ort: Orust
Jag läser tecken för tecken vid all kommunikation. Kanske skriver readStringUntil() sönder någon variabel?

Edit: Det kan också vara att Serial.print() inte klarar lägre strängar än 64 tecken.


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 09.48 2017-12-23 
Användarvisningsbild

Blev medlem: 09.27 2011-08-14
Inlägg: 1094
Telnet har en liten förhandling alldeles i början t ex om echo och så. Det är det du ser som tecken.
Ditt program får svara tillbaks på detta på ett relevant sätt innan sjäva kommunikationen startar.
Föreslår en studie av källkoden till en telnet-klient för se hur förhandlingen ska gå till.


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 11.10 2017-12-23 

Blev medlem: 20.20 2010-08-30
Inlägg: 2791
Ort: Umeå
oiiiii!
gracias!
hittade:
https://stackoverflow.com/questions/104 ... -answering
tack! :D


å God Jul!

på er alla...


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 19.11 2018-01-22 

Blev medlem: 20.20 2010-08-30
Inlägg: 2791
Ort: Umeå
tar upp tråden igen med nästa problem...
ESP8266 verkar vara ooootroligt långsam?
tanken är att använda den som sändare/mottagare till en fjärrkontroll,
knappsats->atmega328->ESP8266*******WIFI*******raspberry pi

men responsen från ESP8266 till raspen är seg som attan,
allt mellan 0.5 till 3 - 4 sekunder, det kommer inte att gå.
har isolerat segheten till ESP8266an och googlat runt i någon timme efter en lösning...

den kopplar upp sig snyggt och prydligt men strängarna in på serieporten tar allt mellan 0.5 och 5 sekunder att nå
socketporten på raspen.

någon som har en idé?


Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#include <dummy.h>

/*
 *  Simple HTTP get webclient test
 */

#include <ESP8266WiFi.h>


const char* ssid     = "Pi3-AP";
const char* password = "raspberry";

const char* host = "172.24.1.1";
  WiFiClient client;
int status = WL_IDLE_STATUS;                     // the Wifi radio's status
  const int port = 10001;


 
void setup() {
  Serial.begin(9600);
  delay(100);

  // We start by connecting to a WiFi network

  client.setNoDelay(true);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("Trying to Connect....\r\n");
  }

  Serial.println("");
  Serial.println("WiFi connected"); 
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("Netmask: ");
  Serial.println(WiFi.subnetMask());
  Serial.print("Gateway: ");
  Serial.println(WiFi.gatewayIP());


  Serial.print("connecting to ");
  Serial.println(host);
 
  // Use WiFiClient class to create TCP connections



 
}

int value = 0;

void loop() {

String command;

 
  if (!client.connected()) {
 

  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    return;
  }

  }

while (Serial.available()==0) {             //Wait for user input
 
  }
  command=Serial.readString();


 
 
  client.print(command);
  //delay(500);
 
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
 

}


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 19.19 2018-01-22 

Blev medlem: 22.31 2008-03-27
Inlägg: 1459
Ort: stockholm
ta bort atmega'n och kör koden direkt på esp8266 utan serieports omvägen


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 06.26 2018-01-23 

Blev medlem: 20.20 2010-08-30
Inlägg: 2791
Ort: Umeå
det har jag gjort, direkt från programmeringsdatorn,
samma eländiga delayer...

om du menar det?
vad gäller atmegan så läser den av en knappmatris med 16 knappar = 8 pinnar, ESPn har bara typ 2/3 pinnar...
så det blir omöjligt att köra matriskoden på den.
kanske HF moduler vore bättre men det vore kul att komplettera med appar som fjärr senare.


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 06.40 2018-01-23 

Blev medlem: 14.43 2007-06-14
Inlägg: 3768
Ort: Hälsingland
Vad har du för ESP då?
Det är väl ändå en 10-11 användbara pinnar på en ESP, så skaffa kort där alla är utdragna till paddar.


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 08.38 2018-01-23 
Användarvisningsbild

Blev medlem: 09.27 2011-08-14
Inlägg: 1094
Multiplexningen verkar inte vara helt optimal tycker jag. Men det kanske funkar.
Tänker att du kan ligga fast i den ena .available - loopen och det händer saker som behöver tas hand om den andra kanalen.
En variant är att kolla kolla både Serial och client . available samtidigt och om någon av de behöver ha något gjort tar du först reda på vilken det var som triggade available och gör det som ska göras. Sedan tillbaks att kolla båda. Vet inte om det hjälper.

Annars går det bra att tajma de olika delarna i din kod, det är inte så mycket, så tre-fyra mätningar av de olika operationerna borde ge dej en förståelse efter vilken del av koden som tar tid.


Upp
 Profil  
 
 Inläggsrubrik: Re: ESP8266 problem
InläggPostat: 14.05 2018-01-23 

Blev medlem: 20.20 2010-08-30
Inlägg: 2791
Ort: Umeå
Bilaga:
Skärmavbild 2018-01-23 kl. 11.53.53.png


en sådan,
använder just nu 12 pinnar på atmegan, och behöver två lysdioder åckså för wifi status.

det händer bara saker på serial, det är där atmegan skickar data p.g.a. knapptrycknigarna.
client är sekundärt och behöver bara innehålla "ACK" från raspen.

det verkar vara seriekommunikationen in till ESPn som tar tid?

men det är två knappar som är tidskritiska,
har kopplat dem direkt på ESPn så att den skickar kommandona direkt...
och de skickas momentant...
så det kanske löser problemet.

prototypen..
Bilaga:
Skärmavbild 2018-01-23 kl. 14.00.29.png


Logga in för att visa de filer som bifogats till detta inlägg.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 12 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 7 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010