TychoNano

Verfasste Forenbeiträge

Ansicht von 15 Beiträgen - 451 bis 465 (von insgesamt 553)
  • Autor
    Beiträge
  • als Antwort auf: Inbetriebnahme #2127
    HRoth
    Teilnehmer

    Hallo ins Forum,

    mein NanoESP-Projekt, bestehend aus einer „klassischen“ Arduino-Steuerung und einer zugehörigen kleineren Webseite, platzt aus allen Speichernähten. Andererseits hat der integrierte ESP8266 genug freies SRAM und Flash-Speicher und auch einen leistungsfähigen Prozessor. Deshalb will ich die Webseite in den ESP8266 verlagern. Die Steuerung soll im Nano verbleiben, schon wegen der Anzahl an IOs, die das Projekt benötigt. Eine Handvoll Variable (int, float, char[]) sind zwischen Nano und ESP8266 auszutauschen.

    Ganz allgemein halte ich die angedachte Struktur für vorteilhaft für viele Projekte. Denn diese Aufgabenverteilung bringt ein deterministischeres Verhalten der Steuerung, während parallel dazu vom anderen Prozessor asynchron und transparent die Internetanbindung bearbeitet wird.

    Nun ergeben sich für mich Fragen, die ich vortragen möchte, bevor ich den ESP8266 des NanoESPs selbst zu programmieren beginne und dabei vielleicht zerschieße.

    1) Ein AT+GMR liefert

    AT version:0.22.0.0(Mar 20 2015 10:04:26)
    SDK version:1.0.0
    compile time:Mar 20 2015 11:00:32

    Wie kann ich eines Tages diesen Zustand wieder herstellen? Kann man das Image auslesen und sichern? Kann man irgendwo genau dieses Original-Binary runterladen? Oder genügt es, ein BareMinimum-Sketch aus der Arduino-IDE zu flashen? Ein USBASP AVR-Programmer mit 5V <-> 3,3V-Umsetzung ist vorhanden.

    2a) Man müsste noch die AT-Befehle um die Möglichkeit erweitern, bidirektional Variablenwerte zwischen Nano und ESP8266 auszutauschen. Sind die Quelltexte des ESP8266 irgendwo erhältlich?

    Oder

    2b) Ich habe etwas von „custom-specific AT commands“ gehört, aber nicht verstanden. Hat jemand damit schon mal gearbeitet?

    Ich bin gespannt auf eure Beiträge und bedanke mich vorab dafür!

    als Antwort auf: Das NanoESP & Pretzel Board Forum #2133
    owagott
    Teilnehmer

    Hallo zusmmen,

    mein Pretzel Board ist im WLAN und Ping fleißig vor sich her, doch eigentlich möchte ich Informationen auf meiner Website darstellen.

    Wo gehts hier eigentlich zum Internet?

    Also ich möchte ein HTTP Get absetzen, alla
    http://www.mustermann.de/login.php?user=NanoESP&pass=fkainka&login=1
    oder so in der Art.

    Das Ergebnis ist dann ein
    <html><head><title>Login</title></head><body>Login sucessfull</head>

    Gruß
    christian

    als Antwort auf: Hardware #2137
    jodebrezel
    Teilnehmer

    Netzwerk-Pager:
    Bei Eingabe, ES GIBT ESSEN!!!
    wird nur der obere und linke Display-Teil beschrieben.
    wo könnte der Fehler liegen ?
    LG jodebrezel

    als Antwort auf: Hardware #2138
    jodebrezel
    Teilnehmer

    Netzwerk-Pager:
    Bei Eingabe, ES GIBT ESSEN!!!
    wird nur der obere und unter linke Display-Teil beschrieben.
    wo könnte der Fehler liegen ?
    LG jodebrezel

    als Antwort auf: Das NanoESP & Pretzel Board Forum #2141
    Daniel
    Teilnehmer

    Hallo,
    mein NanoESP misst die Temperatur. Diese Temperatur soll er nun per WLAN in einer Datei auf ein Storage ablegen.
    Im WLAN ist der NanoESP. aber wie bekomme ich ihn dazu eine Datei auf dem Storage abzulegen?
    Danke für Hilfe

    als Antwort auf: Nano ESP soll eine Datei auf einem Laufwerk ablegen #2142
    Klaus
    Teilnehmer

    Oha, ich glaube da hast Du Dir was vorgenommen.

    In jedem Fall muss der NanoESP die gleiche „Sprache“ sprechen, wie die NAS, sprich ein Kommunikationsprotokoll. Das könnte Samba, FTP, Apple oder NFS sein (es gibt auch noch mehr). Ich weiß nicht, ob es dafür Bibliotheken gibt. Könnte aber sein, dass Du damit den Speicher des Mikrocontrollers füllst. Du müsstes die komplette Kommunikation (Authentifizierung, Befehle an die NAS, Datenübertragung) nachprogrammieren. Hinzu kommt, dass heutige Systeme oft gar keine unverschlüsselte Verbindung mehr annehmen. Die verschlüssselte Kommunikation wird mehr und mehr zum Standard. Der NanoESP kann allerdings keine Verschlüsselung. Dafür wäre ein extra Cryptochip nötig, da der Algorithmus für den Controller zu umfangreich ist.
    Definitiv einfacher wäre es, wenn Du einen „Dienst“ schreibst, der die Daten entgegen nimmt. Das könnte im einfachsten Fall ein PHP-Script sein was auf einem Webserver läuft. Je nachdem welche NAS Du hast, bietet diese einen Webserver an.

    als Antwort auf: Nano ESP soll eine Datei auf einem Laufwerk ablegen #2144
    Daniel
    Teilnehmer

    Danke für die Antwort Klaus. Mein Storage(Synology) hat ein PHP Paket installiert und läuft (wofür auch immer).
    wie müsste ich jetzt weitermachen?

    als Antwort auf: Nano ESP soll eine Datei auf einem Laufwerk ablegen #2145
    Klaus
    Teilnehmer

    Dann würde ich ein PHP-Script schreiben. Ich bin allerdings kein Synology-Experte. Deswegen kann ich Dir nicht sagen, wo Du den Speicherort im Dateisystem findest, damit Du dann auch per Freigabe an die Datei dran kommst.
    Ich würde die Messwerte per URL (….?parameter=wert) übertragen und per PHP-Script in die Datei schreiben lassen.

    als Antwort auf: Nano ESP soll eine Datei auf einem Laufwerk ablegen #2146
    Klaus
    Teilnehmer

    P.S.
    Ich weiß nicht was Du damit vor hast. Aber wenn Du ne Synology hast, kannst Du darauf ja auch ne Datenbank installieren und die Messwerte stattdessen in die Datenbank schreiben. Vielleicht ist das für Deinen Zweck ja zweckmäßiger.

    als Antwort auf: Nano ESP soll eine Datei auf einem Laufwerk ablegen #2147
    Daniel
    Teilnehmer

    Das klingt auch gut. Dann könnte ich mir in einer Webseite sogar den Verlauf anzeigen lassen.
    Ich möchte eigendlich nur wissen welche Temperatur er gerade gemessen hat und dazu nicht in den Keller gehen, Laptop anschließen und Seriellen Monitor auslesen. Mit der Datenbanklösung müsste ich ja sogar ein Diagramm darstellen können.
    Nur wie? Bin kein Programmierer und hangel mich so durch.

    als Antwort auf: Nano ESP soll eine Datei auf einem Laufwerk ablegen #2148
    Klaus
    Teilnehmer

    Da kann ich jetzt leider nur sagen – üben. Ohne Programmierung wirst Du sowas nicht hin bekommen. PHP ist vom Prinzip keine schwere Sprache. Hinzu kommt dann allerdings zur Anzeige noch HTML für die Darstellung. Dir wird also leider nix anderes übrig bleiben, als Dich etwas in C (für den NanoESP), SQL (Datenbankabfrage), PHP und HTML einzuarbeiten. Als Datenbank würde ich Dir eine MySQL/MariaDB empfehlen. Da findest Du im Internet auch massig Anleitungen.
    Du kannst das recht gut auf dem PC mit Xampp üben. Das ist ein Komplettpaket aus für Deinen Fall Webserver, PHP, MySQL-Datenbank. Ist etwas bequemer zum üben, als auf der Synology zu arbeiten und bereits fertig konfiguriert (sogar portabel einsetzbar).
    Als Oberfläche, um die Datenbank zu administrieren und zu schauen, ob Deine Scripte das machen was sie sollen, kann ich PHPmyAdmin empfehlen. Ist bei Xampp auch bereits integriert.

    als Antwort auf: Das NanoESP & Pretzel Board Forum #2149
    Philipp
    Teilnehmer

    Hallo zusammen,

    ich möchte gern von der Seite openweathermap.com meine Wetterdaten abziehen und später in einem Display darstellen.
    Nun ergibt sich folgende Problematik. Ich habe mir die Libs von Hrn. Kainka zu nutze gemacht (Danke schon mal dafür), um die Daten von der Website abzuzeiehen. Dies klappt soweit:

    Serielle Ausgabe:

    WLAN Connected

    AT+CIFSR

    +CIFSR:STAIP,“192.168.XXX.XXX“
    +CIFSR:STAMAC,“18:fe:34:XX:XX:XX“

    OK

    Internet Connection OK
    Ping: 305ms
    CONNECTED TO SERVER
    REQUEST SEND
    {„coord“:{„lon“:9.72,“lat“:53.7},“weather“:[{„id“:802,“main“:“Clouds“,“description“:“scattered clouds“,“icon“:“03d“}],“base“:“stations“,“main“:{„temp“:12,“pressure“:1019,“humidity“:81,“temp_min“:12,“temp_max“:12},“visibility“:10000,“wind“:{„speed“:7.2,“deg“:320},“clouds“:{„all“:40},“dt“:1509097800,“sys“:{„type“:1,“id“:4883,“message“:0.1779,“country“:“DE“,“sunrise“:1509084727,“sunset“:1509119812},“id“:2911298,“name“:“Hamburg“,“cod“:200}CONVERTING DATA
    DISCONNECTED FROM SERVER

    Nun will ja den String ja nicht hoch und runter aus einanderschnibbeln. Sondern schön über die JSON-Lib auslesen.
    Schheinbar verträgt sich http-Request bzw. die WiFi-Verbindung nicht so gut mit dem JSON-Parser.
    Um zu prüfen, ob die Daten richtig sind und um die Buffergröße usw. zu ermitteln habe ich folgendes genutzt:
    JSON-Assistent

    Die Seite gibt einem auch schön den Code wieder, welchen wir zum auslesen der einzelnen Felder benötigen.
    Sobald ich diesen aber nutze, bzw. ab dem Moment (JsonObject& root = jsonBuffer.parseObject(json);) kann das System die Daten nicht mehr aus dem Internetziehen und selbst wenn ich dem Parser die Daten vorgebe, schlägt es fehl.

    Nach dem ich google ein wneig beschäftigt habe, bin ich auch auf folgendes gestoßen:
    why-arduinojson-is-slow aber weitergekommen bin ich damit leider auch nicht, da ich kein Profi in Sachen Programmierung bin.

    Könnt ihr einmal drüber schauen und mit ggf. Verbesserungsvorschläge geben oder sagen woran es liegt? DANKE :)

    (Zeile 118 ist der Parser)

    #include <NanoESP.h>
    // #include <NanoESP_HTTP.h> //NanoESP_HTTP http = NanoESP_HTTP(nanoesp); //http.sendRequest(1, "GET", servername + page);
    #include <ArduinoJson.h>
    #include <SoftwareSerial.h>
    
    #define DEBUG true
    
    #define LED_WLAN 13
    
    #define SSID "SSID meines WLAN"
    #define PASSWORD "Mein super geheimer Key"
    
    #define servername "api.openweathermap.org"
    #define APIKEY  "Mein API-KEY"
    #define CityID "2911298"
    
    NanoESP nanoesp = NanoESP();
    
    //----------------- die NanoESP-Konfiguration vornehmen
    void setup() {
      Serial.begin(19200);
      nanoesp.init();
    
      if (!nanoesp.configWifi(STATION, SSID, PASSWORD)) {
        debug(F("Error: WLAN not Connected\n"));
      }
      else {
        debug(F("WLAN Connected\n"));
        digitalWrite(LED_WLAN, HIGH);
      }
    
      //Print IP in Terminal
      debug(nanoesp.getIp());
    
      //Time for Ping
      int vTime = nanoesp.ping(servername);
    
      if (vTime > 0 ) {
        debug("Internet Connection OK\nPing: " + String(vTime) + "ms");
      }
      else {
        debug(F("Error: Internet Connection"));
      }
    
    }
    
    //----------------- unsere Dauerschleife
    void loop() {
    
      connectServer();
      convertData(readData());
      disconnectServer();
    
      delay(300000);
    
    }
    
    //----------------- Verbinden mit dem openwaethermap-Server und Request senden
    void connectServer() {
      String page = "/data/2.5/weather?id=" + String(CityID) + "&units=metric&APPID=" + String(APIKEY);
      String getRequest = "GET " + page + " HTTP/1.1\r\n" +
                          "Host:" + servername + "\r\n\r\n";
      //"Connection: close\r\n\r\n" ;
      //"Connection: keep-alive\r\n\r\n" ;
    
      if (nanoesp.newConnection(1, "TCP", servername, 80)) {
        debug("CONNECTED TO SERVER");
        if (nanoesp.sendData(1, getRequest)) {
          debug("REQUEST SEND");
        } else {
          debug("BAD REQUEST RESPONSE");
        }
      } else {
        debug("COULD NOT CONNECT TO SERVER");
      }
    }
    
    //----------------- Verbindung mit dem openwaethermap-Server aufheben
    void disconnectServer() {
      if (nanoesp.closeConnection(1)) {
        debug("DISCONNECTED FROM SERVER");
      } else {
        debug("\r\nCOULD NOT DISCONNECT FROM SERVER");
      }
    
    }
    
    //----------------- die angeforderten Daten aus dem NanoESP lesen
    String readData() {
      String data;
      char endOfHeaders[] = "\r\n\r\n";
    
      while (!nanoesp.available()) {}; //warten auf NanoESP
    
      while (nanoesp.available()) {
        if (nanoesp.find(endOfHeaders)) //damit wir nur die JSON-Daten auslesen
        { data = nanoesp.readString();
          Serial.print(data);
        } else {
          debug("COULD NOT READ DATA");
        }
      }
      return data;
    }
    
    //----------------- die Daten aus dem JSON-Format konvertieren
    void convertData(String data) {
      //{"coord":{"lon":9.72,"lat":53.7},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"base":"stations","main":{"temp":13.37,"pressure":1019,"humidity":76,"temp_min":13,"temp_max":14},"visibility":10000,"wind":{"speed":4.6,"deg":280},"clouds":{"all":75},"dt":1509029400,"sys":{"type":1,"id":4883,"message":0.003,"country":"DE","sunrise":1508998236,"sunset":1509033510},"id":2911298,"name":"Hamburg","cod":200}
      debug("CONVERTING DATA");
      const char* json = data.c_str();
      //Serial.println(json);
    
      const size_t bufferSize = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 2 * JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(12) + 390;
      DynamicJsonBuffer jsonBuffer(bufferSize);
    
      //const char* json = "{\"coord\":{\"lon\":9.72,\"lat\":53.7},\"weather\":[{\"id\":803,\"main\":\"Clouds\",\"description\":\"broken clouds\",\"icon\":\"04d\"}],\"base\":\"stations\",\"main\":{\"temp\":13.37,\"pressure\":1019,\"humidity\":76,\"temp_min\":13,\"temp_max\":14},\"visibility\":10000,\"wind\":{\"speed\":4.6,\"deg\":280},\"clouds\":{\"all\":75},\"dt\":1509029400,\"sys\":{\"type\":1,\"id\":4883,\"message\":0.003,\"country\":\"DE\",\"sunrise\":1508998236,\"sunset\":1509033510},\"id\":2911298,\"name\":\"Hamburg\",\"cod\":200}";
     
      JsonObject& root = jsonBuffer.parseObject(json);
    //
    //  const char* name = root["name"]; // "London"
    //
    //  if (!root.success()) {
    //    Serial.println("parseObject() failed");
    //  }
    //  Serial.println(name);
    
    }
    
    //----------------- entsprechend der globalen Vorgabe debuggen wir oder nicht
    void debug(String Msg)
    {
      if (DEBUG)
      {
        Serial.println(Msg);
      }
    }
    als Antwort auf: openweathermap – Daten lesen und parsen der JSON-Daten #2150
    Philipp
    Teilnehmer

    Ich habe am readData() und convertData() noch ein wenig geschraubt, aber trotzdem schlägt das parsing fehl :/
    Die richtigen Daten kommen schon beim JSON-Datenelement an, aber warum es diese nicht versteht gute Frage.

    Ich habe in einem abgespecktem Programm auch ein wenig experimentiert und es kamen tolle Dinge beim parsing rum.
    Alleine ein else-Zweig beim if (!root.success()) { Serial.println(„parseObject() failed“); } führte dazu, dass es nicht mehr ging. :/

    //----------------- die angeforderten Daten aus dem NanoESP lesen
    String readData() {
    
      String data;
      char endOfHeaders[] = "\r\n\r\n";
    
      while (!nanoesp.available()) {}; //warten auf NanoESP
    
      while (nanoesp.available()) {
        if (nanoesp.find(endOfHeaders)) //damit wir nur die JSON-Daten auslesen
        { data = nanoesp.readString();
          //Serial.print(data);
          return data;
        } else {
          debug("COULD NOT READ DATA");
          return "FAILED";
        }
      }
    //----------------- die Daten aus dem JSON-Format konvertieren
    void convertData(String data) {
    
      debug("\r\nCONVERTING DATA");
      const char* json = data.c_str();
      Serial.println(json);
      debug("CONVERTED TO JSON");
    
      const size_t bufferSize = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 2 * JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(12) + 400;
      DynamicJsonBuffer jsonBuffer(bufferSize);
      //StaticJsonBuffer<1024> jsonBuffer;
    
      JsonObject& root = jsonBuffer.parseObject(json);
    
      String location = root["name"];
      float temperature = root["main"]["temp"];
    
      if (!root.success()) { Serial.println("parseObject() failed"); }
      Serial.println("In " + location + " sind es aktuell " + temperature + "°C.");
    
    }
    
    als Antwort auf: Das NanoESP & Pretzel Board Forum #2151
    shbert
    Teilnehmer

    Hallo zusammen,
    gibt es irgendjemanden, der bereits geprüft hat ob der NanoESP „anfällig“ gegen den KRACK Bug ist. Ich nehme an, da der ESP2866 mit seiner Firmware angreifbar war ist es auch der NanoESP. Hat jemand eine Idee, wie das gefixt werden kann?

    * https://www.heise.de/security/artikel/KRACK-so-funktioniert-der-Angriff-auf-WPA2-3865019.html
    * https://github.com/esp8266/Arduino/issues/3725

    als Antwort auf: WiFi KRACK Bug #2152
    Klaus
    Teilnehmer

    Alles was es an Updates für den ESP8266 gibt, kannst Du auch in den NanoESP spielen. Der NanoESP ist einfach ein Arduino Nano mit angeflanschtem ESP8266. Es gibt hier auch Anleitungen, wie Du Firmwares einspielst. Oder die Stiftleiste einlöten. Das ist die direkte Schnittstelle zum ESP-Modul.

    Ich hatte bisher noch nix von einem KRACK-Update gesehen, war jetzt aber auch ne Woche im Krankenhaus. Muss ich mir aber auch mal ansehen, weil ich da auch sehr interessiert dran bin. Hab auch noch ESP-Module einzeln.

Ansicht von 15 Beiträgen - 451 bis 465 (von insgesamt 553)