Buggfix Plus
Aktuellt datum och tid: 04.55 2018-01-23

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 8 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: 2623
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: 795
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: 2623
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: 795
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: 799
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: 2623
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: 2623
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: 1389
Ort: stockholm
ta bort atmega'n och kör koden direkt på esp8266 utan serieports omvägen


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

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 11 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