Aujourd'hui, il y a de nouveau un microcontrôleur derrière la porte, avec lequel vous pouvez non seulement lire différents capteurs et actionneurs de commande, mais aussi vous connecter à un réseau local sans fil (WLAN). Il s'agit d'un autre tableau d'affichage avec la ESP8266.
Ce tableau de répartition possède, outre le processeur avec une mémoire flash de 4 Mo, un convertisseur USB-série CP2102, ce qui permet de programmer facilement le module. La plupart des broches d'E/S sont sorties. Il existe également un régulateur de tension, qui fournit la tension d'alimentation de 3,3 V pour le ESP8266 à partir de la tension d'alimentation USB ou de la tension au niveau du connecteur Vin. Voici une note importante. Comme le ESP8266 fonctionne avec 3,3 V, aucune tension supérieure à 3,3 V ne peut être appliquée à ses entrées ! Un autre avantage de cette planche est qu'elle est plus petite d'une dimension de grille et qu'elle tient donc sur une simple breadboard.
Un flux RSS est un aperçu des actualités au format XML proposé par différents serveurs d'information sur Internet. Dans l'exemple de programme, le serveur de l'ARD est utilisé. Comme les nouvelles sont reçues au format XML, il est facile de n'afficher que certaines parties de l'ensemble des informations. Avec 16 caractères par ligne, l'espace est très réduit, nous ne montrons donc que le titre de chaque message. Voici, par exemple, le début d'un tel flux :
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="/fr/resources/xsl/rdf_xsl.jsp" type="text/xsl"?> <rss version="2.0"> <!-- * XML-format for teasering tagesschau.de-headlines. Version: 2.0 * Release-Date:2002/02/04, last updated 2006/06/28 * * Die Nutzung dieser Inhalte ist ausschliesslich nic⸮ht-kommerziellen Internet- * Angeboten erlaubt, die Nutzung kann jederzeit von tagesschau.de untersagt * werden. tagesschau.de übernimmt keinen Support, zudem wird keine Verfügbarkeit * dieser XML-Datei gewährleistet. Die Inhalte dürfen nicht archiviert werden. //--> <channel> <title>tagesschau.de - Die Nachrichten der ARD</title> <link>https://www.tagesschau.de</link> <description>tagesschau.de</description> <language>de</language> <copyright>tagesschau.de, Norddeutscher Rundfunk</copyright> <docs>http://blogs.law.harvard.edu/tech/rss</docs> <ttl>30</ttl> <item> <title>Corona-Katastrophenfall: Bayern will Maßnahmen verschärfen</title> <link>https://www.tagesschau.de/inland/corona-bayern-119.html</link> <description>Die Neuinfektionen mit dem Corona-Virus bleiben............</description> <guid>https://www.tagesschau.de/inland/corona-bayern-119.html</guid> <category>Inland</category> </item> <item> <title>……………………………..
Comme le montre la photo de couverture, nous voulons utiliser l'un des contrôleurs avec un écran LCD, comme présenté dans le calendrier de l'avent le 4. 12., pour construire un lecteur de flux RSS qui affiche également la date et l'heure. Avec le lecteur, il est possible d'afficher les actualités d'un flux d'informations sous forme de symbole. La date et l'heure sont récupérées à partir d'un serveur de temps NTP.
La variable principale (prononcée "tegg" =label, tag, label) <rss> dans cette variable est la variable <channel>, qui contient les messages individuels avec la variable <item>. Nous sommes intéressés par la marque de titre des articles, le chemin XML doit donc être /rss/channel/item/title.
Tout d'abord, il faut un peu de soudure. En premier lieu, la carte du microcontrôleur doit être munie d'en-têtes de broches. Ensuite, l'adaptateur I2C doit être soudé à l'écran. Je recommande de monter l'adaptateur I2C sur la partie inférieure, car il ne gênera pas le montage dans un boîtier.
Le câblage est assez simple : GND et Vcc de l'écran que nous connectons à GND et Vin du contrôleur. La ligne d'horloge SCL se trouve à D1 et la ligne de données SDA à D2.
Il est maintenant temps de commencer à programmer avec l'IDE Arduino. Si le support des cartes avec ESP8266 MCU n'est pas encore installé, nous devons le faire maintenant. Dans l’IDE Arduino, nous allons via le menu Fichier dans les Préférences ou simplement avec "Ctrl+ ;".
Dans le formulaire, nous cliquons sur le symbole à droite du champ de saisie sous "URLs supplémentaires de l'administrateur du forum". Ici, nous pouvons maintenant entrer l'URL de l'administrateur du forum ESP8266 :
Après avoir sauvegardé les paramètres par défaut, nous appelons le gestionnaire du forum via le menu Outils->Conseil:->Gestionnaire du forum. En termes de recherche, nous tapons "esp8266". Nous obtenons l'entrée suivante, que nous installons.
Nous pouvons maintenant sélectionner un tableau dans le menu Outils->Bureau:->ESP8266 Tableaux. Nous utilisons NodeMCU 1.0....
Tout est maintenant prêt afin d'installer le plan pour le Newsreader.
uint8_t buffer[4000]; //Buffer für XML-Interpreter uint16_t msglen = 0; //Länge der aktuellen Nachricht String msg; //aktuelle Nachricht String news[MAXNEWS]; //Speicher für Nachrichten uint8_t newsCnt = 0; //Anzahl der aktuellen Nachrichten im Speicher uint8_t curNews = 0; //Index der gerade angezeigten Nachricht uint8_t step = 0; //Aktueller Verarbeitungsschritt uint16_t pos = 0; //Startposition zum Durchschieben
//Deutsche Umlaute (UTF8) fürs Display codieren String extraChar(String text){ String res = ""; uint8_t i = 0; char c; while (i<text.length()) { c=text[i]; if (c==195) { //UTF8 Deutsche Umlaute i++; switch (text[i]) { case 164: c=4; break; //ä case 182: c=5; break; //ö case 188: c=6; break; //ü case 159: c=7; break; //ß case 132: c=1; break; //Ä case 150: c=2; break; //Ö case 156: c=3; break; //Ü default: c=0; } } else if (c == 194) { //UTF8 Sonderzeichen i++; if (text[i] == 176) c=0xdf; else c=0; } else if (c > 128) { //normal characters unchanged c=255; } if (c>0) res.concat(c); i++; } return res; }
//Diese Funktion wird vom XML-Interpreter aufgerufen, wenn ein XML-Tag gelesen wurde //tagName enthält den vollständigen XML-Pfad des Tags, data den Inhalt des Tags void XML_callback(uint8_t statusflags, char* tagName, uint16_t tagNameLen, char* data, uint16_t dataLen) { if (statusflags & STATUS_TAG_TEXT) { //Serial.println(tagName); //wenn wir einen Titel-Tag finden, und die maximale Anzahl der Meldungen noch //nicht erreicht ist, wird die Meldung gespeichert und der Zähler erhöht if (strcasecmp(tagName,"/rss/channel/item/title")==0) { data[dataLen] = '\0'; Serial.printf("%i %s\n",newsCnt,data); if (newsCnt < MAXNEWS) { news[newsCnt] = data; newsCnt++; } } } }
//Neue Nachrichten vom RSS-Feed lesen boolean getNews() { boolean res = false; boolean timedOut = false; char c; newsCnt = 0; //nur wenn wir eine Internetverbindung haben if(WiFi.status()== WL_CONNECTED){ //zuerst mit dem HTTP-Server verbinden Serial.println("Mit Server verbinden"); if(client.connect(RSS_SERVER, 80)) { Serial.println("OK\r\nRequesting data..."); //Nun können wir die XML-Seite mit dem Feed holen client.print("GET /"); client.print(RSS_FEED); client.print(" HTTP/1.1\r\nHost: "); client.print(RSS_SERVER); client.print("\r\nConnection: Close\r\n\r\n"); client.flush(); //den XML-Interpreter vorbereiten xml.reset(); newsCnt = 0; uint32_t t = millis(); // Startzeit while(client.connected()) { if((c = client.read()) >= 0) { //Solange wir Zeichen vom Webserver erhalten, werden diese //zur Interpretation an den XML Interpreter weitergegeben xml.processChar(c); delay(1); //Verzögerung 1ms sonst kommt der XML Interpreter nicht nach t = millis(); // Reset timeout clock } else if((millis() - t) >= (READ_TIMEOUT * 1000)) { //Im Falle eines Timeouts wird die Interpretation abgebrochen Serial.println("---Timeout---"); timedOut = true; break; } } if (timedOut) Serial.println("Timeout"); if(!timedOut && (newsCnt > 0)) { //Falls Nachrichten empfangen wurden, wird die erste Nachricht angezeigt curNews = 0; } } client.stop(); } else { //war keine Internet Verbindung vorhanden //wird ein neuer Verbindungsversuch gestartet //und eine Fehlermeldung angezeigt news[0] = "Keine Internetverbindung!"; newsCnt = 1; curNews = 0; } }
//Anzeige aktualisieren void updateDisplay() { //erste Zeile Zeit und Datum time_t now; //aktuelle Zeit struct tm * s_time; //Zeitstruktur aufgesplittet in Jahr, Monat, Tag, Stunden, Minuten und Sekunden char line_buffer[20]; //Buffer für Anzeigenzeile now = time(nullptr); //aktuelle Zeit lesen s_time = localtime(&now); //für die lokale Zeit in die Zeitstruktur umwandeln //Zeilenbuffer mit Uhrzeit und Datum füllen strftime(line_buffer,17,"%d.%m.%Y %H:%M",s_time); //Uhrzeit auf die serielle Schnittstelle ausgeben //Serial.println(line_buffer); //Uhrzeit am Display in Zeile 1 anzeigen lcd.setCursor(0,0); lcd.print(line_buffer); //zweite Zeile Nachrichten lcd.setCursor(0,1); switch (step) { case ST_CLEAR: step = ST_START; //Nächster Schritt if (curNews >= newsCnt) { lcd.print("Aktualisierung.."); getNews(); //neue Nachrichten holen curNews = 0; } else { curNews++; //nächste Nachricht starten lcd.print(" "); if (curNews >= newsCnt) step = ST_END; } msg = extraChar(news[curNews]); msglen = msg.length(); break; case ST_START:lcd.print(msg.substring(0,16)); pos = 0; //Startposition einnehmen step = ST_MOVE; break; case ST_MOVE: pos++; lcd.print(msg.substring(pos,pos+16)); //wenn die Nachricht fertig ist, nächste Nachricht if (pos > (msglen-17)) step=ST_END; break; case ST_END: step = ST_CLEAR; break; } }
//Setup Funktion void setup() { Serial.begin(115200); //Serielle Schnittstelle initialisieren //XML-Interpreter initialisieren xml.init((uint8_t *)buffer, sizeof(buffer), &XML_callback); //Display initialisieren und Beleuchtung ein lcd.init(); lcd.backlight(); //Deutsche Umlaute erzeugen for (uint8_t i = 0; i<8; i++) lcd.createChar(i, font[i]); //Display löschen und Startmeldung anzeigen lcd.clear(); lcd.setCursor(0,0); lcd.print("AZ-Delivery"); lcd.setCursor(0,1); lcd.print("Einen Moment...."); //Interne Uhr konfigurieren configTime(MYTZ, "pool.ntp.org"); //WLAN initialisieren und mit dem WLAN verbinden WiFi.persistent(false); WiFi.mode(WIFI_STA); WiFi.begin(STASSID, STAPSK); uint8_t cnt = 0; //warten bis Verbindung hergestellt wurde while ((WiFi.status() != WL_CONNECTED) && (cnt<10)) { Serial.println(WiFi.status()); cnt++; delay(500); } newsCnt = 0; step = ST_CLEAR; }
Presque tout ce dont nous avons besoin est inclus dans le paquet ESP8266. Seules les bibliothèques pour l'affichage LCD et pour l'évaluation des données XML manquent. Ils peuvent être installés via la gestion de la bibliothèque dans l'IDE Arduino.
Nous saisissons "I2C LCD" comme terme de recherche et trouvons, un peu plus loin dans la liste, la bibliothèque souhaitée.
Ensuite, nous saisissons "Tiny XML" comme terme de recherche et nous obtenons la bibliothèque que nous voulons.
Avant d'établir le croquis, nous devons saisir les références du WLAN à la place des astérisques.
Vous pouvez également choisir un autre serveur de nouvelles, un autre flux sur ce serveur et/ou un autre nombre d'articles. Ensuite, vous devez modifier les entrées #define correspondantes. Le nombre de messages ne doit pas être supérieur à 10.
Ne soyez pas surpris si vous obtenez l'avertissement suivant lors de la compilation.
ATTENTION : La bibliothèque LiquidCrystal_I2C prétend fonctionner sur une (des) architecture(s) avr et peut être incompatible avec votre carte actuelle fonctionnant sur une (des) architecture(s) esp8266.
Cet avertissement est dû à une entrée incorrecte dans les spécifications de la bibliothèque. La bibliothèque fonctionne bien avec les MCU ESP8266.
Une fois que tous les messages du serveur de nouvelles ont été affichés, les messages sont à nouveau récupérés sur le serveur. L'heure est mise à jour en permanence. Le passage de l'heure d'été à l'heure normale est automatique.
Bravo, diese Änderungen haben das Problem mit den Abstürzen auch mit der neuesten Version 3.0.2 von esp8266 im Boardverwalter beseitigt.
Meine Vorschläge dennoch:
– hinzufügen von 3 Leerzeichen zu der Nachricht >>>>> msg = " " + extraChar(news[curNews]);
sowie ein kleineres Delay >>>> //Verzögerung fürs Durchschieben >>>>> delay(250);
erhöhen die Lesbarkeit der Nachrichten
Andreas Wolter
@wominator: sind es identische D1 Mini?
Haben Sie den Exception Decoder probiert, wie es in der Fehlermeldung steht?
wominator
Ich habe heute stundenlang versucht, diesen Sketch ans Laufen zu bekommen. D1 Mini und einem LDC 16×2. Im März 2021 habe ich diesen Sketch, gleiches Board und LCD 20×4 zum Laufen gebracht und läuft bis heute. Wenn ich den Sketch kompiliere und hochlade, passiert folgendes:
18:31:02.094 > ets Jan 8 2013,rst cause:2, boot mode:(3,6)
18:31:02.094 →
18:31:02.094 → load 0×4010f000, len 3460, room 16
18:31:02.094 → tail 4
18:31:02.094 → chksum 0xcc
18:31:02.094 → load 0×3fff20b8, len 40, room 4
18:31:02.094 → tail 4
18:31:02.094 → chksum 0xc9
18:31:02.094 → csum 0xc9
18:31:02.094 → v000627d0
18:31:02.094 → ~ld
18:31:03.441 → 7
18:31:03.942 → 7
18:31:04.443 → 7
18:31:04.922 → 7
18:31:05.407 → 7
18:31:05.946 → 7
18:31:07.163 → 7
18:31:07.696 → Mit Server verbinden
18:31:08.748 → OK
18:31:08.748 → Requesting data…
18:31:10.004 → 0 G20-Gipfel: Draghi spricht von großem Erfolg
18:31:10.651 → 1 Kommentar: G20-Beschlüsse sind nur der Anfang eines Weges
18:31:11.352 → 2 Klimagipfel beginnt in Glasgow: "Hört den Schrei der Erde"
18:31:12.107 → 3 Klimaneutralität bis 2060: China – Verschmutzer und Vorreiter
18:31:12.808 → 4 UN-Konferenz in Glasgow: Die wichtigsten Fragen rund ums Klima
18:31:13.456 → 5 UN-Report: Die sieben vergangenen Jahre waren die wärmsten
18:31:14.141 → 6 Spahn will Gipfel zu "Booster-Impfungen"
18:31:14.810 → 7 Liveblog: + Merkel dringt auf rasche Maßnahmen +
18:31:15.495 → 8 Coronavirus-Lage in Deutschland – aktuelle Zahlen
18:31:16.190 → 9 Coronavirus weltweit: Aktuelle Fallzahlen zu Covid-19
18:31:16.813 → 10 Aktueller Stand der Corona-Impfungen in Deutschland
18:31:17.515 → 11 Covid-19: Wie ist die Lage auf den Intensivstationen?
18:31:18.181 → 12 Atemwegserkrankung: RS-Virus – viele Kinderkliniken voll
18:31:18.836 → 13 Kohlegegner demonstrieren in Lützerath gegen Tagebau
18:31:19.569 → 14 Steuerentlastungen: Lindner kritisiert Ampel-Partner
18:31:20.325 → 15 Mützenich: Bei Ministeramt sollte Esken SPD-Parteivorsitz abgeben
18:31:20.973 → 16 Livestream: Die Nachrichten auf tagesschau24
18:31:21.559 → 17 Wahlen in Japan: Regierungskoalition bleibt an der Macht
18:31:22.276 → 18 Türkischer Frachter: Migranten dürfen in Griechenland von Bord
18:31:22.992 → 19 Taliban-Chef Achundsada offenbar aufgetreten
18:31:23.679 → 20 90 Jahre Airstream: Der amerikanische Traum vom Reisen
18:31:24.363 → 20 US-Hummerfischer kritisieren Regeln zum Schutz der Wale
18:31:25.081 → 20 Uhren auf Normalzeit zurückgestellt: Die geschenkte Stunde
18:31:25.780 → 20 Bundesliga: Augsburg schlägt Stuttgart 4:1
18:31:26.434 → 20 CDU-Vorsitz: Funktionäre proben Basisdemokratie
18:31:27.198 → 20 Wegen starker Sonneneruption: Polarlichter über Deutschland?
18:31:27.883 → 20 Greenpeace: Weniger Tiere für besseres Klima
18:31:28.597 → 20 Welche Rolle spielt Deutschland beim Klima-Gipfel?
18:31:29.298 → 20 US-Schauspieler Baldwin äußert sich zu tödlichem Schuss
18:31:29.999 → 20 Wiederaufbau von Gaza kommt nur mühsam voran
18:31:30.701 → 20 Friedlicher Protest gegen G20-Gipfel in Rom
18:31:31.418 → 20 Hunderte Klimaaktivisten demonstrieren in Glasgow
18:31:32.103 → 20 EU und USA legen Handelsstreit über Sonderzölle bei
18:31:32.858 → 20 Was sich durch die globale Mindeststeuer verändert
18:31:33.559 → 20 Immobilienentwickler Evergrande wendet Pleite ab
18:31:34.308 → 20 Marktbericht: US-Börsen bleiben auf Rekordkurs
18:31:35.043 → 20 Warum Deutschland wohl bald Impfstoff vernichten muss
18:31:35.810 → 20 Extremismus-Verdacht: BND erteilt Professor Hausverbot
18:31:36.464 → 20 Abschiebepolitik: Vom Allgäu nach Afghanistan
18:31:37.182 → 20 Bundesliga: Frankfurt rettet bei 1:1 Punkt gegen Leipzig
18:31:37.868 → 20 Bundesliga: Bayern München schlägt Union Berlin 5:2
18:31:38.569 → 20 Zukunftspodcast: Nur nachhaltiger Fischfang? Was dann?
18:31:39.270 → 20 faktenfinder-Podcast: Aufklären über "Fake News"
18:31:39.871 →
18:31:39.871 → -——————- CUT HERE FOR EXCEPTION DECODER -——————
18:31:39.871 >
18:31:39.871 → Exception (0):
18:31:39.871 → epc1=0×402012fe epc2=0×00000000 epc3=0×00000000 excvaddr=0×00000000 depc=0×00000000
18:31:39.871 →
18:31:39.871 → >>>stack>>>
18:31:39.871 →
18:31:39.871 → ctx: cont
18:31:39.871 → sp: 3ffffd70 end: 3fffffc0 offset: 0190
18:31:39.871 → 3fffff00: 00000000 3ffeec7c 3ffefe38 402012e5
18:31:39.871 → 3fffff10: 3ffeffc8 3ffeec7a 3ffefe60 4020488c
18:31:39.918 → 3fffff20: 00000000 00000040 00000014 3ffeec7b
18:31:39.918 → 3fffff30: 3ffeed70 3ffeec7a 3ffefe60 402013aa
18:31:39.918 → 3fffff40: 312e3133 30322e30 31203132 31333a38
18:31:39.918 → 3fffff50: 40105c00 001a5a42 3fff0178 00000000
18:31:39.918 → 3fffff60: 4025237e 00000007 3ffefe70 00000001
18:31:39.918 → 3fffff70: 617ed2de 00000000 000001f4 40205744
18:31:39.918 → 3fffff80: 3fff0a9c 40201a38 3fff0068 3fff0068
18:31:39.918 → 3fffff90: 3fffdad0 00000000 3fff0054 402015b5
18:31:39.918 → 3fffffa0: 3fffdad0 00000000 3fff0054 40205864
18:31:39.918 → 3fffffb0: feefeffe feefeffe 3ffe8694 40100df9
18:31:39.971 → <<<stack<<<
18:31:39.971 →
18:31:39.971 → -——————- CUT HERE FOR EXCEPTION DECODER -——————
Wieso passiert das mit dem anderen D1Mini und dem LCD20x4 nicht? Dieser lädt die Feeds von 0 bis 19 (habe ich so eingestellt) und stellt sie dann korrekt dar.
Hier lädt dieser D1Mini bis 19 und dann noch 22 Feeds, bis er abstürzt. Die Hinweise von “Paul” habe ich eingebaut, sonst bekommt man ja gar keine Feeds mehr.
Der Sketch:
#include //WLAN Unterstützung
#include
#include //Zeitzonen Konstanten
#include //Bibliothek für das LCD Display
#include //XML-Interpreter zum Lesen des RSS-Feed
//SSID und PSK vom lokalen WLAN
#define STASSID “XXXXXX” //enter your SSID here
#define STAPSK “XXXXXX” //enter your password here
//Zeitzone mit Sommer/Winterzeit Information
#define MYTZ TZ_Europe_Berlin
// Timeout zum Lesen des RSS-Feed in Sekunden
#define READ_TIMEOUT 10
//Diese Funktion wird vom XML-Interpreter aufgerufen, wenn ein XML-Tag gelesen wurde
//tagName enthält den vollständigen XML-Pfad des Tags, data den Inhalt des Tags
void XML_callback(uint8_t statusflags, char* tagName, uint16_t tagNameLen, char* data, uint16_t dataLen) {
if (statusflags & STATUS_TAG_TEXT) {
//Serial.println(tagName);
//wenn wir einen Titel-Tag finden, und die maximale Anzahl der Meldungen noch
//nicht erreicht ist, wird die Meldung gespeichert und der Zähler erhöht
if (strcasecmp(tagName,“/rss/channel/item/title”)==0) {
data[dataLen] = ‘\0’;
Serial.printf(“%i %s\n”,newsCnt,data);
if (newsCnt < MAXNEWS) {
news[newsCnt] = data;
newsCnt++;
}
}
}
}
Ufff, da muss ich erst einmal drauf kommen.
Auf einem Ubuntu Laptop habe ich mit einem relativ sauberen Arduino V1.8.15 mit dem Boardverwalter für ESP8266 experimentiert. Mit der Version 3.0.2 (die derzeit letzte Version) bricht die Kommunikation ab. in einer Github Diskussion wurde über einen Memory Leak gesprochen. Also habe ich die vorgeschlagene 2.3.0 getestet, da ist aber TZ.h nicht verfügbar.
Aber BRAVO !!! mit der Version 2.7.4 für das ESP8266 Board läuft jetzt die Anzeige. Ich melde mich wieder wenn ich weitere Infos habe.
Kinders, es bleibt ein Hobby, damit muss ich kein Geld verdienen, es darf auch mal holprich sein, so lange wir anschliessend eine Lösung finden. Der Weg ist das Ziel.
Viel Spaß noch, aber meine 2 × 4 Matrix Version läuft deutlich flüssiger und erlaubt deutlich einfachere Wechsel zu anderen RSS feeds.
Jos
Jos Wich
dabei benutze ich derzeit die Arduino Version 1.8.13.
die Meldung beim compilieren:
esptool.py v3.0
Serial port COM3
Connecting….
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 8c:aa:b5:xxxxxxxxxxxx
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Auto-detected Flash size: 4MB
Erasing flash (this may take a while)…
Chip erase completed successfully in 1.3s
Compressed 403488 bytes to 297361…
Writing at 0×00000000... (5 %)
Ja, dann habe ich auch den Flash Speicher im Chip mal komplett gelöscht
Was mache ich falsch ?
Jos
Jos Wich
Danke für die schnelle Antwort Gerald, nur frag’ ich mich ob der download link eine andere Version liefert. Ich habe heute ein neues AZ-Delivery ESP82266-12F Board ausgepackt. Dann den code in einer frischen Datei geladen, die “Paul” updates übernommen (Port 443, ClientSecure, etc), auch
while(client.connected() && (newsCnt < MAXNEWS)) ersetzt
dann mit der Anzahl MAXNEWS gespielt, 5, 8 oder 10 und immer bricht das Board zusammen wenn genau diese Menge an Nachrichten im Serial Monitor gezeigt wurden….
13:18:26.615 > 6 Aktueller Stand der Corona-Impfungen in Deutschland
13:18:27.261 → 7 Covid-19: Wie ist die Lage auf den Intensivstationen?
13:18:27.261 →
13:18:27.261 → -——————- CUT HERE FOR EXCEPTION DECODER -——————
13:18:27.261 →
13:18:27.261 → Exception (0):
13:18:27.261 → epc1=0×40201302 epc2=0×00000000 epc3=0×00000000 excvaddr=0×00000000 depc=0×00000000
13:18:27.309 →
ich mag die Idee, komme aber leider nicht voran. Die Matrix Version läuft problemlos.
Danke im Voraus für weitere Hilfe
Jos
Gerald Lechner
Das weitere Einlesen kann abgebrochen werden indem in der Funktion getNews() die Zeile
while(client.connected())
durch
while(client.connected() && (newsCnt < MAXNEWS))
ersetzt wird.
Jos Wich
eine sehr interessante Idee, da habe ich mich echt gefreut.
Mittlerweile habe ich aber erfolgreich die andere Version mit 2 x MAX7219 aktiv. Auch mit anderen RSS Feeds. Nur bei dieser Variante holt sich der Buffer sehr viele Nachrichten die alle bis zu
MAXNEWS hochzählen. Aber wenn z.B. MAXNEWS = 5, dann bekommen alle nachfolgenden Nachrichten diese gleiche newscnt Zahl, denn die wird nicht weiter erhöht.
if (newsCnt < MAXNEWS) {
news[newsCnt] = data;
newsCnt++;
Leider finde ich nicht die Verzweigung dass dann keine weiteren Infos abgeholt werden sollen, sondern auf dem 1602 angezeigt werden müssen. Zwangsläufig muss dann der Buffer überlaufen und startet der 8266 immer wieder neu.
Gerne höre ich wo ich diesen Fehler korrigieren kann. Meine einzige Änderung im Aufbau ist die I2C Verbindung zum 1602, aber da kann ich mir nicht vorstellen dass da das Problem liegt.
Hoffentlich bis bald !
viel Spaß beim basteln
Jos
Hans-Jürgen Pollmer
Hallo,
mit den Änderungen von Paul läuft der Sketch problemlos.
Ich würde aber gern das liquidcrystal_i2c-Display durch Matrixmodule max7219 ersetzen.
Wie ist der Sketch zu ändern, oder gibt es schon fertige Projekte damit?
Vielen Dank für evtl. Lösungen.
Paul
Vielen Dank für diese Idee. So, wie ihr sie vorgestellt habt, funktioniert sie leider nicht, da tagesschau.de Daten nur über einen https-Request ausgibt. Aber mit einem kleinen Umbau des Sketches läßt sich der Server überreden, doch Daten zu senden.
1. Erweiterung der Einbindung von Bibliotheken um die SlientSecure-Bibliothek:
#include
2. Die WLAN-Client Instanz ändern auf
WiFiClientSecure client;
3. in der boolean-Routine getNews() den Server-Port für die Client-Verbindung zum Server ändern von 80 auf 443
4. Im Setup vor dem Befehl WiFi.begin folgende Zeile hinzufügen:
client.setInsecure();
Mit diesem kleinen Umbau funktioniert der Sketch und damit auch der RSS-Reader problemlos und zeigt die Titel auf dem LC-Display an.
Der Befehl “client.setInsecure()” ermöglicht das Abfragen von Daten vom HTTPS-Server, ohne den FIngerprint senden zu müssen, der sonst vorhanden sein müsste, sich aber in einem bestimmten Interval immer wieder ändert.
Harry
Der Tagesschau Feed kann nicht mehr geladen werden da die Server nur noch verschlüsselte Verbindungen beantworten.
Also entweder das Programm reparieren oder auf einen unverschlüsselten Feed ausweichen. z.B.
#define RSS_SERVER “newsfeed.zeit.de” //Nachrichtenserver
#define RSS_FEED “index” //Name des Feeds
Wominator
Sehr geehrter Herr Lechner,
ich habe dieses Projekt nachgebaut, mit einem LCD 20×4 und einem D1Mini. Display, WiFi usw. funktioniert, aber der RSS-Feed wird nicht abgerufen. Auf dem Display erscheint das aktuelle Datum, die Uhrzeit und “Aktualisierung..” Dann passiert nichts mehr.
Im Seriellen Monitor wird angezeigt:
01:13:08.880 → Mit Server verbinden
01:13:08.880 → OK
01:13:08.880 → Requesting data…
01:13:11.088 → Mit Server verbinden
01:13:11.088 → OK
01:13:11.088 → Requesting data…
01:13:13.296 → Mit Server verbinden
01:13:13.343 → OK
01:13:13.343 → Requesting data…
01:13:15.535 → Mit Server verbinden
01:13:15.582 → OK
01:13:15.582 → Requesting data…
01:13:17.758 → Mit Server verbinden
01:13:17.812 → OK
Egal, ob ich den RSS-Feed von der tagesschau oder von Heise eingebe, immer das selbe Ergebnis. Haben Sie eine Idee, warum der Feed nicht geladen und angezeigt wird?
Danke im Voraus!
Womi
Bernd-Steffen Großmann
Hi Anthony, I have this problem (the first two letters are not readable) too, but only with iOS (Safari). It works properly with Chrome, Firefox, and other browsers on Windows or Android. Sincerely Bernd-Steffen
Anthony Goodhew
Formatting of this blog not working properly.
Restez au courant
Obtenez un code de réduction de 15% dès maintenant ! Apprenez immédiatement si nous présentons un nouveau projet passionnant ou si nous avons des offres imbattables !
14 commentaires
Jos Wich
Bravo, diese Änderungen haben das Problem mit den Abstürzen auch mit der neuesten Version 3.0.2 von esp8266 im Boardverwalter beseitigt.
Meine Vorschläge dennoch:
– hinzufügen von 3 Leerzeichen zu der Nachricht >>>>> msg = " " + extraChar(news[curNews]);
sowie ein kleineres Delay >>>> //Verzögerung fürs Durchschieben >>>>> delay(250);
erhöhen die Lesbarkeit der Nachrichten
Andreas Wolter
@wominator: sind es identische D1 Mini?
Haben Sie den Exception Decoder probiert, wie es in der Fehlermeldung steht?
wominator
Ich habe heute stundenlang versucht, diesen Sketch ans Laufen zu bekommen. D1 Mini und einem LDC 16×2. Im März 2021 habe ich diesen Sketch, gleiches Board und LCD 20×4 zum Laufen gebracht und läuft bis heute. Wenn ich den Sketch kompiliere und hochlade, passiert folgendes:
18:31:02.094 > ets Jan 8 2013,rst cause:2, boot mode:(3,6)
18:31:02.094 →
18:31:02.094 → load 0×4010f000, len 3460, room 16
18:31:02.094 → tail 4
18:31:02.094 → chksum 0xcc
18:31:02.094 → load 0×3fff20b8, len 40, room 4
18:31:02.094 → tail 4
18:31:02.094 → chksum 0xc9
18:31:02.094 → csum 0xc9
18:31:02.094 → v000627d0
18:31:02.094 → ~ld
18:31:03.441 → 7
18:31:03.942 → 7
18:31:04.443 → 7
18:31:04.922 → 7
18:31:05.407 → 7
18:31:05.946 → 7
18:31:07.163 → 7
18:31:07.696 → Mit Server verbinden
18:31:08.748 → OK
18:31:08.748 → Requesting data…
18:31:10.004 → 0 G20-Gipfel: Draghi spricht von großem Erfolg
18:31:10.651 → 1 Kommentar: G20-Beschlüsse sind nur der Anfang eines Weges
18:31:11.352 → 2 Klimagipfel beginnt in Glasgow: "Hört den Schrei der Erde"
18:31:12.107 → 3 Klimaneutralität bis 2060: China – Verschmutzer und Vorreiter
18:31:12.808 → 4 UN-Konferenz in Glasgow: Die wichtigsten Fragen rund ums Klima
18:31:13.456 → 5 UN-Report: Die sieben vergangenen Jahre waren die wärmsten
18:31:14.141 → 6 Spahn will Gipfel zu "Booster-Impfungen"
18:31:14.810 → 7 Liveblog: + Merkel dringt auf rasche Maßnahmen +
18:31:15.495 → 8 Coronavirus-Lage in Deutschland – aktuelle Zahlen
18:31:16.190 → 9 Coronavirus weltweit: Aktuelle Fallzahlen zu Covid-19
18:31:16.813 → 10 Aktueller Stand der Corona-Impfungen in Deutschland
18:31:17.515 → 11 Covid-19: Wie ist die Lage auf den Intensivstationen?
18:31:18.181 → 12 Atemwegserkrankung: RS-Virus – viele Kinderkliniken voll
18:31:18.836 → 13 Kohlegegner demonstrieren in Lützerath gegen Tagebau
18:31:19.569 → 14 Steuerentlastungen: Lindner kritisiert Ampel-Partner
18:31:20.325 → 15 Mützenich: Bei Ministeramt sollte Esken SPD-Parteivorsitz abgeben
18:31:20.973 → 16 Livestream: Die Nachrichten auf tagesschau24
18:31:21.559 → 17 Wahlen in Japan: Regierungskoalition bleibt an der Macht
18:31:22.276 → 18 Türkischer Frachter: Migranten dürfen in Griechenland von Bord
18:31:22.992 → 19 Taliban-Chef Achundsada offenbar aufgetreten
18:31:23.679 → 20 90 Jahre Airstream: Der amerikanische Traum vom Reisen
18:31:24.363 → 20 US-Hummerfischer kritisieren Regeln zum Schutz der Wale
18:31:25.081 → 20 Uhren auf Normalzeit zurückgestellt: Die geschenkte Stunde
18:31:25.780 → 20 Bundesliga: Augsburg schlägt Stuttgart 4:1
18:31:26.434 → 20 CDU-Vorsitz: Funktionäre proben Basisdemokratie
18:31:27.198 → 20 Wegen starker Sonneneruption: Polarlichter über Deutschland?
18:31:27.883 → 20 Greenpeace: Weniger Tiere für besseres Klima
18:31:28.597 → 20 Welche Rolle spielt Deutschland beim Klima-Gipfel?
18:31:29.298 → 20 US-Schauspieler Baldwin äußert sich zu tödlichem Schuss
18:31:29.999 → 20 Wiederaufbau von Gaza kommt nur mühsam voran
18:31:30.701 → 20 Friedlicher Protest gegen G20-Gipfel in Rom
18:31:31.418 → 20 Hunderte Klimaaktivisten demonstrieren in Glasgow
18:31:32.103 → 20 EU und USA legen Handelsstreit über Sonderzölle bei
18:31:32.858 → 20 Was sich durch die globale Mindeststeuer verändert
18:31:33.559 → 20 Immobilienentwickler Evergrande wendet Pleite ab
18:31:34.308 → 20 Marktbericht: US-Börsen bleiben auf Rekordkurs
18:31:35.043 → 20 Warum Deutschland wohl bald Impfstoff vernichten muss
18:31:35.810 → 20 Extremismus-Verdacht: BND erteilt Professor Hausverbot
18:31:36.464 → 20 Abschiebepolitik: Vom Allgäu nach Afghanistan
18:31:37.182 → 20 Bundesliga: Frankfurt rettet bei 1:1 Punkt gegen Leipzig
18:31:37.868 → 20 Bundesliga: Bayern München schlägt Union Berlin 5:2
18:31:38.569 → 20 Zukunftspodcast: Nur nachhaltiger Fischfang? Was dann?
18:31:39.270 → 20 faktenfinder-Podcast: Aufklären über "Fake News"
18:31:39.871 →
18:31:39.871 → -——————- CUT HERE FOR EXCEPTION DECODER -——————
18:31:39.871 >
18:31:39.871 → Exception (0):
18:31:39.871 → epc1=0×402012fe epc2=0×00000000 epc3=0×00000000 excvaddr=0×00000000 depc=0×00000000
18:31:39.871 →
18:31:39.871 → >>>stack>>>
18:31:39.871 →
18:31:39.871 → ctx: cont
18:31:39.871 → sp: 3ffffd70 end: 3fffffc0 offset: 0190
18:31:39.871 → 3fffff00: 00000000 3ffeec7c 3ffefe38 402012e5
18:31:39.871 → 3fffff10: 3ffeffc8 3ffeec7a 3ffefe60 4020488c
18:31:39.918 → 3fffff20: 00000000 00000040 00000014 3ffeec7b
18:31:39.918 → 3fffff30: 3ffeed70 3ffeec7a 3ffefe60 402013aa
18:31:39.918 → 3fffff40: 312e3133 30322e30 31203132 31333a38
18:31:39.918 → 3fffff50: 40105c00 001a5a42 3fff0178 00000000
18:31:39.918 → 3fffff60: 4025237e 00000007 3ffefe70 00000001
18:31:39.918 → 3fffff70: 617ed2de 00000000 000001f4 40205744
18:31:39.918 → 3fffff80: 3fff0a9c 40201a38 3fff0068 3fff0068
18:31:39.918 → 3fffff90: 3fffdad0 00000000 3fff0054 402015b5
18:31:39.918 → 3fffffa0: 3fffdad0 00000000 3fff0054 40205864
18:31:39.918 → 3fffffb0: feefeffe feefeffe 3ffe8694 40100df9
18:31:39.971 → <<<stack<<<
18:31:39.971 →
18:31:39.971 → -——————- CUT HERE FOR EXCEPTION DECODER -——————
Wieso passiert das mit dem anderen D1Mini und dem LCD20x4 nicht? Dieser lädt die Feeds von 0 bis 19 (habe ich so eingestellt) und stellt sie dann korrekt dar.
Hier lädt dieser D1Mini bis 19 und dann noch 22 Feeds, bis er abstürzt. Die Hinweise von “Paul” habe ich eingebaut, sonst bekommt man ja gar keine Feeds mehr.
Der Sketch:
#include //WLAN Unterstützung
#include
#include //Zeitzonen Konstanten
#include //Bibliothek für das LCD Display
#include //XML-Interpreter zum Lesen des RSS-Feed
//SSID und PSK vom lokalen WLAN
#define STASSID “XXXXXX” //enter your SSID here
#define STAPSK “XXXXXX” //enter your password here
//Zeitzone mit Sommer/Winterzeit Information
#define MYTZ TZ_Europe_Berlin
// Timeout zum Lesen des RSS-Feed in Sekunden
#define READ_TIMEOUT 10
//Verarbeitungsschritte
#define ST_CLEAR 0 //neue Daten vom Server holen
#define ST_START 1 //Meldung anzeigen
#define ST_MOVE 2 //Meldung durchschieben
#define ST_END 3 //Meldungsende anzeigen
#define MAXNEWS 20 //Maximale Anzahl der Meldungen
#define RSS_SERVER “www.tagesschau.de” //Nachrichtenserver
#define RSS_FEED “newsticker.rdf” //Name des Feeds
// LCD Adresse = 0×27, Anzahl Zeichen 16 Anzahl Zeilen 2
LiquidCrystal_I2C lcd(0×27,16,2);
//WLAN Client Instanz
WiFiClientSecure client;
//XML Interpreter Instanz
TinyXML xml;
//Deutsche Sonderzeichen
uint8_t font 89 {
{0x0c,0×12,0×12,0×0c,0×00,0×00,0×00,0×00}, // 0 °
{0x11,0×04,0×0a,0×11,0×1f,0×11,0×11,0×00}, // 1 Ä
{0x11,0×0e,0×11,0×11,0×11,0×11,0×0e,0×00}, // 2 Ö
{0x11,0×00,0×11,0×11,0×11,0×11,0×0e,0×00}, // 3 Ü
{0x0a,0×00,0×1e,0×01,0×0f,0×13,0×0d,0×00}, // 4 ä
{0x0a,0×00,0×0e,0×11,0×11,0×11,0×0e,0×00}, // 5 ö
{0x0a,0×00,0×12,0×12,0×12,0×12,0×0f,0×00}, // 6 ü
{0x0c,0×12,0×12,0×14,0×12,0×12,0×14,0×00} // 7 ß
};
uint8_t buffer4000; //Buffer für XML-Interpreter
uint16_t msglen = 0; //Länge der aktuellen Nachricht
String msg; //aktuelle Nachricht
String news[MAXNEWS]; //Speicher für Nachrichten
uint8_t newsCnt = 0; //Anzahl der aktuellen Nachrichten im Speicher
uint8_t curNews = 0; //Index der gerade angezeigten Nachricht
uint8_t step = 0; //Aktueller Verarbeitungsschritt
uint16_t pos = 0; //Startposition zum Durchschieben
//Deutsche Umlaute (UTF8) fürs Display codieren
String extraChar(String text){
String res = "";
uint8_t i = 0;
char c;
while (i<text.length()) {
c=text[i];
if (c==195) { //UTF8 Deutsche Umlaute
i++;
switch (text[i]) {
case 164: c=4; break; //ä
case 182: c=5; break; //ö
case 188: c=6; break; //ü
case 159: c=7; break; //ß
case 132: c=1; break; //Ä
case 150: c=2; break; //Ö
case 156: c=3; break; //Ü
default: c=0;
}
} else if (c == 194) { //UTF8 Sonderzeichen
i++;
if (text[i] == 176) c=0xdf; else c=0;
} else if (c > 128) { //normal characters unchanged
c=255;
}
if (c>0) res.concat©;
i++;
}
return res;
}
//Diese Funktion wird vom XML-Interpreter aufgerufen, wenn ein XML-Tag gelesen wurde
//tagName enthält den vollständigen XML-Pfad des Tags, data den Inhalt des Tags
void XML_callback(uint8_t statusflags, char* tagName, uint16_t tagNameLen, char* data, uint16_t dataLen) {
if (statusflags & STATUS_TAG_TEXT) {
//Serial.println(tagName);
//wenn wir einen Titel-Tag finden, und die maximale Anzahl der Meldungen noch
//nicht erreicht ist, wird die Meldung gespeichert und der Zähler erhöht
if (strcasecmp(tagName,“/rss/channel/item/title”)==0) {
data[dataLen] = ‘\0’;
Serial.printf(“%i %s\n”,newsCnt,data);
if (newsCnt < MAXNEWS) {
news[newsCnt] = data;
newsCnt++;
}
}
}
}
//Neue Nachrichten vom RSS-Feed lesen
boolean getNews() {
boolean res = false;
boolean timedOut = false;
char c;
newsCnt = 0;
//nur wenn wir eine Internetverbindung haben
if(WiFi.status()== WL_CONNECTED){
//zuerst mit dem HTTP-Server verbinden
Serial.println(“Mit Server verbinden”);
if(client.connect(RSS_SERVER, 443)) {
Serial.println(“OK\r\nRequesting data…”);
//Nun können wir die XML-Seite mit dem Feed holen
client.print(“GET /”);
client.print(RSS_FEED);
client.print(" HTTP/1.1\r\nHost: “);
client.print(RSS_SERVER);
client.print(”\r\nConnection: Close\r\n\r\n");
client.flush();
//den XML-Interpreter vorbereiten
xml.reset();
newsCnt = 0;
uint32_t t = millis(); // Startzeit
while(client.connected()) {
if((c = client.read()) >= 0) {
//Solange wir Zeichen vom Webserver erhalten, werden diese
//zur Interpretation an den XML Interpreter weitergegeben
xml.processChar©;
delay(1); //Verzögerung 1ms sonst kommt der XML Interpreter nicht nach
t = millis(); // Reset timeout clock
} else if((millis() – t) >= (READ_TIMEOUT * 1000)) {
//Im Falle eines Timeouts wird die Interpretation abgebrochen
Serial.println(“—Timeout—”);
timedOut = true;
break;
}
}
if (timedOut) Serial.println(“Timeout”);
if(!timedOut && (newsCnt > 0)) {
//Falls Nachrichten empfangen wurden, wird die erste Nachricht angezeigt
curNews = 0;
}
}
client.stop();
} else {
//war keine Internet Verbindung vorhanden
//wird ein neuer Verbindungsversuch gestartet
//und eine Fehlermeldung angezeigt
news0 = “Keine Internetverbindung!”;
newsCnt = 1;
curNews = 0;
}
}
//Anzeige aktualisieren
void updateDisplay() {
//erste Zeile Zeit und Datum
time_t now; //aktuelle Zeit
struct tm * s_time; //Zeitstruktur aufgesplittet in Jahr, Monat, Tag, Stunden, Minuten und Sekunden
char line_buffer20; //Buffer für Anzeigenzeile
now = time(nullptr); //aktuelle Zeit lesen
s_time = localtime(&now); //für die lokale Zeit in die Zeitstruktur umwandeln
//Zeilenbuffer mit Uhrzeit und Datum füllen
strftime(line_buffer,17,“%d.%m.%Y %H:%M”,s_time);
//Uhrzeit auf die serielle Schnittstelle ausgeben
//Serial.println(line_buffer);
//Uhrzeit am Display in Zeile 1 anzeigen
lcd.setCursor(0,0);
lcd.print(line_buffer);
//zweite Zeile Nachrichten
lcd.setCursor(0,1);
switch (step) {
case ST_CLEAR: step = ST_START; //Nächster Schritt
if (curNews >= newsCnt) {
lcd.print(“Kommt gleich..”);
getNews(); //neue Nachrichten holen
curNews = 0;
} else {
curNews++; //nächste Nachricht starten
lcd.print(" ");
if (curNews >= newsCnt) step = ST_END;
}
msg = extraChar(news[curNews]);
msglen = msg.length();
break;
case ST_START:lcd.print(msg.substring(0,16));
pos = 0; //Startposition einnehmen
step = ST_MOVE;
break;
case ST_MOVE: pos++;
lcd.print(msg.substring(pos,pos+16));
//wenn die Nachricht fertig ist, nächste Nachricht
if (pos > (msglen-17)) step=ST_END;
break;
case ST_END: step = ST_CLEAR;
break;
}
}
//Setup Funktion
void setup() {
Serial.begin(115200); //Serielle Schnittstelle initialisieren
//XML-Interpreter initialisieren
xml.init((uint8_t *)buffer, sizeof(buffer), &XML_callback);
//Display initialisieren und Beleuchtung ein
lcd.init(); //on error – try lcd.begin();
lcd.backlight();
//Deutsche Umlaute erzeugen
for (uint8_t i = 0; i<8; i++) lcd.createChar(i, font[i]);
//Display löschen und Startmeldung anzeigen
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Lupus Transitus");
lcd.setCursor(0,1);
lcd.print(“Moment….”);
//Interne Uhr konfigurieren
configTime(MYTZ, “pool.ntp.org”);
//WLAN initialisieren und mit dem WLAN verbinden
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
client.setInsecure();
WiFi.begin(STASSID, STAPSK);
uint8_t cnt = 0;
//warten bis Verbindung hergestellt wurde
while ((WiFi.status() != WL_CONNECTED) && (cnt<10)) {
Serial.println(WiFi.status());
cnt++;
delay(500);
}
newsCnt = 0;
step = ST_CLEAR;
}
//Hauptschleife
void loop() {
//Zeit anzeigen
updateDisplay();
//Verzögerung fürs Durchschieben
delay(500);
}
Jos Wich
Ufff, da muss ich erst einmal drauf kommen.
Auf einem Ubuntu Laptop habe ich mit einem relativ sauberen Arduino V1.8.15 mit dem Boardverwalter für ESP8266 experimentiert. Mit der Version 3.0.2 (die derzeit letzte Version) bricht die Kommunikation ab. in einer Github Diskussion wurde über einen Memory Leak gesprochen. Also habe ich die vorgeschlagene 2.3.0 getestet, da ist aber TZ.h nicht verfügbar.
Aber BRAVO !!! mit der Version 2.7.4 für das ESP8266 Board läuft jetzt die Anzeige. Ich melde mich wieder wenn ich weitere Infos habe.
Kinders, es bleibt ein Hobby, damit muss ich kein Geld verdienen, es darf auch mal holprich sein, so lange wir anschliessend eine Lösung finden. Der Weg ist das Ziel.
Viel Spaß noch, aber meine 2 × 4 Matrix Version läuft deutlich flüssiger und erlaubt deutlich einfachere Wechsel zu anderen RSS feeds.
Jos
Jos Wich
dabei benutze ich derzeit die Arduino Version 1.8.13.
die Meldung beim compilieren:
esptool.py v3.0
Serial port COM3
Connecting….
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 8c:aa:b5:xxxxxxxxxxxx
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Auto-detected Flash size: 4MB
Erasing flash (this may take a while)…
Chip erase completed successfully in 1.3s
Compressed 403488 bytes to 297361…
Writing at 0×00000000... (5 %)
Ja, dann habe ich auch den Flash Speicher im Chip mal komplett gelöscht
Was mache ich falsch ?
Jos
Jos Wich
Danke für die schnelle Antwort Gerald, nur frag’ ich mich ob der download link eine andere Version liefert. Ich habe heute ein neues AZ-Delivery ESP82266-12F Board ausgepackt. Dann den code in einer frischen Datei geladen, die “Paul” updates übernommen (Port 443, ClientSecure, etc), auch
while(client.connected() && (newsCnt < MAXNEWS)) ersetzt
dann mit der Anzahl MAXNEWS gespielt, 5, 8 oder 10 und immer bricht das Board zusammen wenn genau diese Menge an Nachrichten im Serial Monitor gezeigt wurden….
13:18:26.615 > 6 Aktueller Stand der Corona-Impfungen in Deutschland
13:18:27.261 → 7 Covid-19: Wie ist die Lage auf den Intensivstationen?
13:18:27.261 →
13:18:27.261 → -——————- CUT HERE FOR EXCEPTION DECODER -——————
13:18:27.261 →
13:18:27.261 → Exception (0):
13:18:27.261 → epc1=0×40201302 epc2=0×00000000 epc3=0×00000000 excvaddr=0×00000000 depc=0×00000000
13:18:27.309 →
ich mag die Idee, komme aber leider nicht voran. Die Matrix Version läuft problemlos.
Danke im Voraus für weitere Hilfe
Jos
Gerald Lechner
Das weitere Einlesen kann abgebrochen werden indem in der Funktion getNews() die Zeile
while(client.connected())
durch
while(client.connected() && (newsCnt < MAXNEWS))
ersetzt wird.
Jos Wich
eine sehr interessante Idee, da habe ich mich echt gefreut.
Mittlerweile habe ich aber erfolgreich die andere Version mit 2 x MAX7219 aktiv. Auch mit anderen RSS Feeds. Nur bei dieser Variante holt sich der Buffer sehr viele Nachrichten die alle bis zu
MAXNEWS hochzählen. Aber wenn z.B. MAXNEWS = 5, dann bekommen alle nachfolgenden Nachrichten diese gleiche newscnt Zahl, denn die wird nicht weiter erhöht.
if (newsCnt < MAXNEWS) {
news[newsCnt] = data;
newsCnt++;
Leider finde ich nicht die Verzweigung dass dann keine weiteren Infos abgeholt werden sollen, sondern auf dem 1602 angezeigt werden müssen. Zwangsläufig muss dann der Buffer überlaufen und startet der 8266 immer wieder neu.
Gerne höre ich wo ich diesen Fehler korrigieren kann. Meine einzige Änderung im Aufbau ist die I2C Verbindung zum 1602, aber da kann ich mir nicht vorstellen dass da das Problem liegt.
Hoffentlich bis bald !
viel Spaß beim basteln
Jos
Hans-Jürgen Pollmer
Hallo,
mit den Änderungen von Paul läuft der Sketch problemlos.
Ich würde aber gern das liquidcrystal_i2c-Display durch Matrixmodule max7219 ersetzen.
Wie ist der Sketch zu ändern, oder gibt es schon fertige Projekte damit?
Vielen Dank für evtl. Lösungen.
Paul
Vielen Dank für diese Idee. So, wie ihr sie vorgestellt habt, funktioniert sie leider nicht, da tagesschau.de Daten nur über einen https-Request ausgibt. Aber mit einem kleinen Umbau des Sketches läßt sich der Server überreden, doch Daten zu senden.
1. Erweiterung der Einbindung von Bibliotheken um die SlientSecure-Bibliothek:
#include
2. Die WLAN-Client Instanz ändern auf
WiFiClientSecure client;
3. in der boolean-Routine getNews() den Server-Port für die Client-Verbindung zum Server ändern von 80 auf 443
4. Im Setup vor dem Befehl WiFi.begin folgende Zeile hinzufügen:
client.setInsecure();
Mit diesem kleinen Umbau funktioniert der Sketch und damit auch der RSS-Reader problemlos und zeigt die Titel auf dem LC-Display an.
Der Befehl “client.setInsecure()” ermöglicht das Abfragen von Daten vom HTTPS-Server, ohne den FIngerprint senden zu müssen, der sonst vorhanden sein müsste, sich aber in einem bestimmten Interval immer wieder ändert.
Harry
Der Tagesschau Feed kann nicht mehr geladen werden da die Server nur noch verschlüsselte Verbindungen beantworten.
Also entweder das Programm reparieren oder auf einen unverschlüsselten Feed ausweichen. z.B.
#define RSS_SERVER “newsfeed.zeit.de” //Nachrichtenserver
#define RSS_FEED “index” //Name des Feeds
Wominator
Sehr geehrter Herr Lechner,
ich habe dieses Projekt nachgebaut, mit einem LCD 20×4 und einem D1Mini. Display, WiFi usw. funktioniert, aber der RSS-Feed wird nicht abgerufen. Auf dem Display erscheint das aktuelle Datum, die Uhrzeit und “Aktualisierung..” Dann passiert nichts mehr.
Im Seriellen Monitor wird angezeigt:
01:13:08.880 → Mit Server verbinden
01:13:08.880 → OK
01:13:08.880 → Requesting data…
01:13:11.088 → Mit Server verbinden
01:13:11.088 → OK
01:13:11.088 → Requesting data…
01:13:13.296 → Mit Server verbinden
01:13:13.343 → OK
01:13:13.343 → Requesting data…
01:13:15.535 → Mit Server verbinden
01:13:15.582 → OK
01:13:15.582 → Requesting data…
01:13:17.758 → Mit Server verbinden
01:13:17.812 → OK
Egal, ob ich den RSS-Feed von der tagesschau oder von Heise eingebe, immer das selbe Ergebnis. Haben Sie eine Idee, warum der Feed nicht geladen und angezeigt wird?
Danke im Voraus!
Womi
Bernd-Steffen Großmann
Hi Anthony, I have this problem (the first two letters are not readable) too, but only with iOS (Safari). It works properly with Chrome, Firefox, and other browsers on Windows or Android. Sincerely Bernd-Steffen
Anthony Goodhew
Formatting of this blog not working properly.