ESP8266 Programmierung

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5062
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

ESP8266 Programmierung

Beitrag von af0815 »

Ich möchte mich in die Programmierung vom ESP8266 einarbeiten.

Dazu möchte ich mit mit fpcupdeluxe einen xtensa-freertos compiler für lx106 bauen.

Gefundene Quellen:
Nicht mehr ganz aktuell, da der esp8266 als xtensa-freertos lx106 vom FPC unterstützt wird.
viewtopic.php?t=10719
viewtopic.php?t=12096

Aktueller:
https://wiki.lazarus.freepascal.org/Xtensa
https://forum.lazarus.freepascal.org/in ... ic=52679.0

A gibt es noch mehr Infos dazu, bzw. hat wer schon Crosssompilert für den ESP8266 ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 5218
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ESP8266 Programmierung

Beitrag von Mathias »

Dies müsste man mal neu ausprobieren immerhin sind fast 1 1/2 Jahr vergangen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5062
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: ESP8266 Programmierung

Beitrag von af0815 »

Aktuell habe ich mir einen Crosscompiler bauen können für den esp8266.

Dazu musste ich im fpcupdeluxe folgende Änderung machen: m_any_to_freertosxtensa.pas

Code: Alles auswählen

function TAny_FreeRTOSXtensa.GetBinUtils(Basepath:string): boolean;
var
  AsFile: string;
  S,PresetBinPath:string;
begin
  result:=inherited;
  if result then exit;

  if (FSubArch=TSUBARCH.lx6) then
    FBinUtilsPrefix:=GetCPU(TargetCPU)+'-esp32-elf-';
  if (FSubArch=TSUBARCH.lx106) then
    FBinUtilsPrefix:=GetCPU(TargetCPU)+'-lx106-elf-';

  // Start with any names user may have given
  AsFile:=FBinUtilsPrefix+'as'+GetExeExt;
Weil bei mir das CrossBin mit lx106-elf- lautet (Habe mir die letzen Tools gezogen).

Weiters in der fpc.cfg folgend Eintrag der durch fpcupdeluxe gemacht wurde geändert

Code: Alles auswählen

# begin fpcup do not remove xtensa-freertos
# Inserted by fpcup 01.01.2022 14:01:48
# Cross compile settings dependent on both target OS and target CPU
#IFDEF FPC_CROSSCOMPILING
#IFDEF FREERTOS
#IFDEF CPUXTENSA
#IFDEF CPULX106
-FlC:\data\lazdev\xtensa\cross\lib\xtensa-freertos\lx106\
#ENDIF CPULX106
-FDC:\data\lazdev\xtensa\cross\bin\xtensa-freertos\bin\
-XPxtensa-lx106-elf-
-Wpesp8266
-FuC:\data\lazdev\xtensa\fpc\units\xtensa-freertos\$FPCSUBARCH\rtl
-FuC:\data\lazdev\xtensa\fpc\units\xtensa-freertos\$FPCSUBARCH\packages
#ENDIF CPUXTENSA
#ENDIF FREERTOS
#ENDIF FPC_CROSSCOMPILING
# end fpcup do not remove
da ist der Eintrag -Wpesp8266 nicht richtig.
Jetzt kompilert der mal,

Code: Alles auswählen

program HelloWorld2;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes
  { you can add units after this };

begin
  writeln('Hello world');
end.
allerdings mit einem Linkerfehler
Using util C:\data\lazdev\xtensa\cross\bin\xtensa-freertos\bin\xtensa-lx106-elf-gcc.exe
[0.182] Executing "C:\data\lazdev\xtensa\cross\bin\xtensa-freertos\bin\xtensa-lx106-elf-gcc.exe -C -P -x c -E -o C:\data\lazdev\xtensa\projects\/esp8266_out.ld -I C:\data\lazdev\xtensa\projects\/ /components/esp8266/ld/esp8266.ld" using comspec "C:\WINDOWS\system32\cmd.exe"
[0.182] Executing "C:\WINDOWS\system32\cmd.exe" with command line " /C C:\data\lazdev\xtensa\cross\bin\xtensa-freertos\bin\xtensa-lx106-elf-gcc.exe -C -P -x c -E -o C:\data\lazdev\xtensa\projects\/esp8266_out.ld -I C:\data\lazdev\xtensa\projects\/ /components/esp8266/ld/esp8266.ld"
xtensa-lx106-elf-gcc.exe: error: /components/esp8266/ld/esp8266.ld: No such file or directory
xtensa-lx106-elf-gcc.exe: warning: '-x c' after last input file has no effect
xtensa-lx106-elf-gcc.exe: fatal error: no input files
compilation terminated.
HelloWorld2.lpr(13,24) Error: Error while linking
Komplettes Log anbei.

Ich habe keine Ahnung wie der auf /components/esp8266/ld/esp8266.ld kommt ?! Da muss noch was in der Konfiguration für den Linker falsch laufen.
Dateianhänge
messages.txt
(80.45 KiB) 39-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 5218
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ESP8266 Programmierung

Beitrag von Mathias »

Ich dachte, der Crosscompiler lief ohne Änderung. Nur ein paar Einstellungen in fpcupdelue hatte es gebraucht.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5062
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: ESP8266 Programmierung

Beitrag von af0815 »

Das vermutlich für den ESP32. Die Änderungen sind Anpassungen an den ESP8266. Weil von dem habe ich jetzt ein paar bei mir liegen. Kosten ja fast nichts. Ich möchte an und für sich, Thermometer die per WIFI die Temperatur funken und auch in einen Sleep Zustand gehen können, damit machen. Ist so ein Wohnwagen Projekt :-).

RasPis saufen mir zuviel Akku. Das ganze soll mal über eine 96Ah GelBattarie laufen. Die ist zwar groß aber hält auch nicht ewig. Ausserdem interessieren mich die Dinger mal.

Edit:
Ich habe mir mal eine Kommandozeile nachgebaut, die entspricht in etwa der aus der Wiki

Code: Alles auswählen

@echo on
cd C:\data\lazdev\xtensa\projects
C:\data\lazdev\xtensa\fpc\bin\i386-win32\ppcrossxtensa -vd -Furtl/units/xtensa-freertos/ -Tfreertos -XPxtensa-lx106-elf- -O3 -Wpesp8266 HelloWorld2.lpr -Fl~/esp/xtensa-lx106-elf-libs/ -FlC:\data\esp\ESP8266_RTOS_SDK\components/esp8266/lib -FlC:\data\esp\ESP8266_RTOS_SDK/components/newlib/newlib/lib -Fl~/esp/xtensa-lx106-elf/xtensa-lx106-elf/sysroot/lib/
pause
Das SDK liegt bei mir unter C:\data\esp\ESP8266_RTOS_SDK

Anhand der Fehlermeldung sieht es so aus, als würde der Crosscompiler die Zeile nicht korrekt für den Linker zusammenbauen und dem fehlt ein Teil des Pfades für den Linker (esp8266.ld). Ich gehe davon aus, das etwas in der Kommandozeile für den Crosscompiler fehlt.
HelloWorld2.lpr(3,2) Handling switch "$MODE"
HelloWorld2.lpr(3,16) Handling switch "$H+"
HelloWorld2.lpr(6,10) Handling switch "$IFDEF"
HelloWorld2.lpr(8,10) Handling switch "$ENDIF"
Assembling helloworld2
xtensa-lx106-elf-gcc.exe: error: /components/esp8266/ld/esp8266.ld: No such file or directory
xtensa-lx106-elf-gcc.exe: warning: '-x c' after last input file has no effect
xtensa-lx106-elf-gcc.exe: fatal error: no input files
compilation terminated.
HelloWorld2.lpr(13,24) Error: Error while linking
HelloWorld2.lpr(13,24) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted

C:\data\lazdev\xtensa\projects>REM C:\data\lazdev\xtensa\cross\bin\xtensa-freertos\bin\xtensa-lx106-elf-gcc.exe -C -P -x c -E -o C:\data\lazdev\xtensa\projects\/esp8266_out.ld -I C:\data\lazdev\xtensa\projects\/ /components/esp8266/ld/esp8266.ld

C:\data\lazdev\xtensa\projects>pause
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 5218
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ESP8266 Programmierung

Beitrag von Mathias »

RasPis saufen mir zuviel Akku. Das ganze soll mal über eine 96Ah GelBattarie laufen.
Was hindert dich einen Arduino zu nehmen, diese Dinger laufen sehr zuverlässig mit FPC.
Ist es wegen des Wifi-Modules ?
Spannend ist der ESP sicher.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5062
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: ESP8266 Programmierung

Beitrag von af0815 »

Wifi ist für mich das interessante.

Mit dem ESP kannst du jeden Sensor relativ einfach über WIFI arbeiten lassen. Damit kannst du jeden Sensor ganz einfach einbinden ohne viele Schnittstellen.

Mit Arduino läuft schon mal ein Blinker. Also Showstopper ist das mit Lazarus nicht, es würde mich nur interessieren. Auch wie ich mit Lazarus und dem Wifi umgehe.

Die nächsten Versuche mit Arduino gehen in Richtung Wifi und dann schau ich mir an, wie das mit dem Deep Sleep, Aufwachen, Variablen behalten und Ablauf aussieht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1059
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: ESP8266 Programmierung

Beitrag von fliegermichl »

Hab auch so einen hier rumfliegen. Ist so ein kleines Entwicklerboard von Reichelt mit Display und zwei Tastern.
Interessante Geschichte.
esp8266.jpg
esp8266.jpg (65.99 KiB) 1248 mal betrachtet

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5062
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: ESP8266 Programmierung

Beitrag von af0815 »

Meiner ist ohne Display und Schnittstelle.
20220103_132450.jpg
(855.64 KiB) Noch nie heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1059
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: ESP8266 Programmierung

Beitrag von fliegermichl »

Für den Einsatz "im Feld" ist so einer ohne Schnittstelle sicher geeigneter aber zum rumspielen und probieren fand ich das ganz brauchbar.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5062
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: ESP8266 Programmierung

Beitrag von af0815 »

Mit Arduino läuft ein bereits ein Webserver der mir die Temperatur von einem One-Wire Thermofühler DS18B20 anzeigt. Der Fühler kostet fast genausoviel wie der Esp8266-12F jeweils so um die 3,5 Euro. Also keine Beträge. Damit kann ich einen jeden Fühler ans WLAN bringen. Der Code ist für mich nicht wirklich aufregend. Link: https://randomnerdtutorials.com/esp8266 ... duino-ide/
Aktuell bin ich am Überlegen ob ich Web oder MQTT versenden soll im Wohnmobil. Ausserdem möchte ich die Schaltung mit Batterie testen, auch wie hoch der Stromverbrauch ist.

Edit: Um den Umfang in Lazarus zu bekommen, ist verdammt viel arbeit nötig - ich glaube ich bleibe da bei Arduino.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1059
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: ESP8266 Programmierung

Beitrag von fliegermichl »

Konntest du denn schon ein "Hallo Welt" mit FPC für den ESP8266 erstellen?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5062
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: ESP8266 Programmierung

Beitrag von af0815 »

Nein, es zwickt sich mit internas vom compiler. In der Erzeugten ppas.bat kann man das schön nachstellen. Compilieren geht, aber beim linken nicht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5062
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: ESP8266 Programmierung

Beitrag von af0815 »

Aktuell gibt es auch noch Herausforderungen unter Linux ( https://forum.lazarus.freepascal.org/in ... #msg429858 ). Das ist die besser erforschte Version gewesen. Solange das nicht sauber geht, brauche ich das auch nicht weiter zu Verfolgen.

BTW: Das WIFI ist echt der Hammer. Mit Arduino gehe sehr nette Sachen, wie Temperaturen in einem Webserver darstellen, noch dazu über 1 Draht Sensoren. Das heisst ein einzige IO reicht aus um mehere Temperatursensoren zu lesen. Die hängen ganz einfach nur parallel, echt steil. Aktuell schau ich mal, wie ich das so klein wie möglich halte und wie ich den Strom so gering wie möglich lasse. Vielleicht geht das ganze auch mit Battterie/Akku, wenn ich keinen Webserver verwende, sondern die Sensordaten nur von Zeit zu Zeit sende. Zur Zeit schluckt der noch zuviel Strom, ich bin aber erst mal am Anfang.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 5218
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ESP8266 Programmierung

Beitrag von Mathias »

Ich habe es mal in der Schnelle probiert. Mit fpcupdeluxe konnte ich auf Anhieb eine Crosscompiler bauen. Auf der Fusszeile hat es einen ESP32-Button, welcher einem den Crosscompiler baut.
Wen ich dann mit dem neuen gebauten Lazarus ein einfache Projekt startet und bei Zielplattform folgendes einstelle FreeRTOS/xtensa/lx106 wir dies bei einem OK ohne Fehler übernommen.
Den Debugger habe ich deaktiviert, da so eine komische dwarf Meldung kommt.
Dann kommt bei kompilieren folgende Fehlermeldung.

Code: Alles auswählen

Projekt kompilieren, OS: freertos, CPU: xtensa, Ziel: /home/tux/fpcupdeluxe/projects/project1: Exit code 1, Fehler: 1, Hinweise: 3
Hint: Start of reading config file /home/tux/fpcupdeluxe/fpc/bin/x86_64-linux/fpc.cfg
Note: Changed CPU type to be consistent with specified controller
Hint: End of reading config file /home/tux/fpcupdeluxe/fpc/bin/x86_64-linux/fpc.cfg
Verbose: Free Pascal Compiler version 3.3.1-9876-gd5a104f493 [2022/01/07] for xtensa
Verbose: Copyright (c) 1993-2021 by Florian Klaempfl and others
Verbose: Target OS: FreeRTOS
Verbose: Compiling /home/tux/fpcupdeluxe/projects/project1.lpr
Fatal: Can't find unit esp8266rtos_30300 used by Project1
Verbose: Compilation aborted
Verbose: /home/tux/fpcupdeluxe/fpc/bin/x86_64-linux/ppcrossxtensa returned an error exitcode
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Antworten