Unit Serial und ESP8266
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Hallo,
ja in Linux. Ich habe eben hier viewtopic.php?f=65&t=17187 meine Vorgehensweise hochgeladen. Ich denke in einem eigenen Beitrag wird es besser gefunden.
Viele Grüße
Bernd
ja in Linux. Ich habe eben hier viewtopic.php?f=65&t=17187 meine Vorgehensweise hochgeladen. Ich denke in einem eigenen Beitrag wird es besser gefunden.
Viele Grüße
Bernd
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Hallo,
ich kämpfe noch immer mit der Verbindung zum ESP. Mit meinem Programm kann ich nur Daten empfangen wenn ich vorher mit CuteCom auf den ESP8266 zugegriffen habe. Also Esp anstecken, mein Programm öffnen, keine Fehlermeldung aber auch keine Ausgabe von "Mein erstes writeln". Einmal kurz mit CuteCom verbunden. Dann wieder mit meinem Programm, alles läuft wie es soll. Ich denke mir fehlt da am Anfang noch irgend etwas um alles anzustossen. Kann mir da jemand weiter helfen?
Hier nochmal der Code:
Viele Grüße
Bernd
ich kämpfe noch immer mit der Verbindung zum ESP. Mit meinem Programm kann ich nur Daten empfangen wenn ich vorher mit CuteCom auf den ESP8266 zugegriffen habe. Also Esp anstecken, mein Programm öffnen, keine Fehlermeldung aber auch keine Ausgabe von "Mein erstes writeln". Einmal kurz mit CuteCom verbunden. Dann wieder mit meinem Programm, alles läuft wie es soll. Ich denke mir fehlt da am Anfang noch irgend etwas um alles anzustossen. Kann mir da jemand weiter helfen?
Hier nochmal der Code:
Code: Alles auswählen
program SynaserTest;
{$mode objfpc}{$H+}
uses
Classes,SysUtils,Synaser,Crt;
procedure ReadMyESP8266;
var
ser: TBlockSerial;
Value: string;
begin
ser:=TBlockSerial.Create;
try
ser.Connect('/dev/ttyUSB0');
Sleep(1000);
ser.config(74880,8, 'N', SB1, False, False);
Write('Device: ' + ser.Device + ' Status: ' + ser.LastErrorDesc +' '+
Inttostr(ser.LastError));
Sleep(1000);
repeat
Value := ser.RecvString(1000);
if Value <> '' then
writeln(Value);
until keypressed;
finally
Writeln('Serial Port will be freed...');
ser.free;
Writeln('Serial Port was freed successfully!');
end;
end;
begin
ReadMyESP8266;
end.
Bernd
Re: Unit Serial und ESP8266
ich hab mal eben bei mir über eine unit geschaut:
mir fällt noch LinuxLock ein, ist per default auf true, sollte aber nicht das problem sein.
Code: Alles auswählen
....
SoftFlow := False;
HardFlow := False;
ComPort1.Config(BaudRate, DataSize, Parity, Stopbits, SoftFlow, HardFlow);
Sleep(200);
(* Datenempfang starten *)
ComPort1.RTS := True;
ComPort1.DTR := True;
Timer1.Enabled := True;
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Hallo Schoschy,
danke für deine Antwort. Hat leider auch nicht geholfen. Aber ich hab mich dann an af0815 erinnert der mich vor der Baudrate gewarnt hat. Ich hab jetzt ein Programm mit 9600 Baud (mit der Arduino IDE) drauf gespielt und siehe da es klappt alles ohne Probleme.
Dazu hätte ich dann noch eine Frage. In den Beispielen von ccrause wird die Baudrate so festgelegt:
Wenn ich das Ausrechne kommt bei mir 177230 heraus. Damit ich in CuteCom was Empfange muss ich 74880 Baud einstellen. Warum? Und wie stelle ich da 9600 ein?
Viele Grüße
Bernd
danke für deine Antwort. Hat leider auch nicht geholfen. Aber ich hab mich dann an af0815 erinnert der mich vor der Baudrate gewarnt hat. Ich hab jetzt ein Programm mit 9600 Baud (mit der Arduino IDE) drauf gespielt und siehe da es klappt alles ohne Probleme.
Dazu hätte ich dann noch eine Frage. In den Beispielen von ccrause wird die Baudrate so festgelegt:
Code: Alles auswählen
uart_cfg.baud_rate := (115200*40) div 26;
Viele Grüße
Bernd
- af0815
- Lazarusforum e. V.
- Beiträge: 6886
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Unit Serial und ESP8266
Vielleicht hier etwas mehr Erklärung https://ullisroboterseite.de/esp8266-faq.html
if the frequency of the crystal oscillator is 26 MHz, then the baud rate for printing is 74880
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Vielen Dank für den Link. Da muss ich wohl noch etwas stöbern und denken
Viele Grüße
Bernd

Viele Grüße
Bernd
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Hallo,
also ich habe mich etwas eingelesen. Der Bootloader vom node mcu ESP8266 verwendet eine Baudrate von 74880.
Im Beispiel von ccrause wird (115200*40) div 26 verwendet. Müsste es nicht (115200*26) div 40 heißen. Dann kommt nämlich 74880 heraus. Soweit so gut gebe ich 74880 ein (oder 9600) funktioniert es auch nicht. Ich sehe die Meldungen nur während des Bootvorgangs solange ich in CuteCom 74880 eingebe, gebe ich 9600 ein kommt nur Mist.
So jetzt hab ich 115200 als Baudrate gesetzt und in CuteCom 74880 eingegeben und habe eine funktionierende Ausgabe. Ich verstehe nicht was da passiert!
Mein Test-Programm (von der Github Seite von ccrause):
CuteCom Ausgabe:
Viele Grüße
Bernd
also ich habe mich etwas eingelesen. Der Bootloader vom node mcu ESP8266 verwendet eine Baudrate von 74880.
Im Beispiel von ccrause wird (115200*40) div 26 verwendet. Müsste es nicht (115200*26) div 40 heißen. Dann kommt nämlich 74880 heraus. Soweit so gut gebe ich 74880 ein (oder 9600) funktioniert es auch nicht. Ich sehe die Meldungen nur während des Bootvorgangs solange ich in CuteCom 74880 eingebe, gebe ich 9600 ein kommt nur Mist.
So jetzt hab ich 115200 als Baudrate gesetzt und in CuteCom 74880 eingegeben und habe eine funktionierende Ausgabe. Ich verstehe nicht was da passiert!
Mein Test-Programm (von der Github Seite von ccrause):
Code: Alles auswählen
program testuart;
uses
freertos, task, portmacro, uart, esp_err;
procedure sleep(Milliseconds: cardinal); // Should be in SysUtils but including it causes an error in ESP32
begin
vTaskDelay(Milliseconds div portTICK_PERIOD_MS);
end;
const
{$ifdef FPC_MCU_ESP32}
UART_PORT = 1;
TX1_PIN = 19;
RX1_PIN = 18;
{$else}
// Use UART1 on GPIO2 / D4
UART_PORT: Tuart_port = UART_NUM_0;
// ESP8266 only have fixed pin assignments
{$endif}
msg = 'UART test message'#13#10;
var
uart_cfg: Tuart_config;
begin
{$ifdef FPC_MCU_ESP32}
uart_cfg.baud_rate := 115200;
{$else}
// On my esp8266 board the baud rate is low by a factor 26/40
// Adjust baud rate specified to get to the actual desired baud:
uart_cfg.baud_rate := 115200;//(115200*40) div 26;
{$endif}
uart_cfg.data_bits := UART_DATA_8_BITS;
uart_cfg.parity := UART_PARITY_DISABLE;
uart_cfg.stop_bits := UART_STOP_BITS_1;
uart_cfg.flow_ctrl := UART_HW_FLOWCTRL_DISABLE;
{$ifdef FPC_MCU_ESP32}
uart_cfg.source_clk := UART_SCLK_APB;
{$endif}
{$ifdef FPC_MCU_ESP32}
EspErrorCheck(uart_driver_install(UART_PORT, 1024, 0, 0, nil, 0));
EspErrorCheck(uart_param_config(UART_PORT, @uart_cfg));
EspErrorCheck(uart_set_pin(UART_PORT, TX1_PIN, RX1_PIN,
UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
{$else}
EspErrorCheck(uart_param_config(UART_PORT, @uart_cfg));
EspErrorCheck(uart_driver_install(UART_PORT, 256, 0, 0, nil, 0));
{$endif}
repeat
writeln('Standard output');
uart_write_bytes(UART_PORT, @msg[1], length(msg));
sleep(1000);
until false;
end.
Viele Grüße
Bernd
- af0815
- Lazarusforum e. V.
- Beiträge: 6886
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Unit Serial und ESP8266
Hast du eine 26MHz oder 40MHz Type ? Es dürfte laut den Beschreibungen beide geben. Und beim Boot wird immer mit 74880 gearbeitet, erst beim Benutzer Programm kann man den UART umstellen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Also in der Arduino IDE wird mir 26Mhz angezeigt:
Falls das interessant ist, die CPU ist auf 80Mhz eingestellt.
Wenn ich mit der Arduino IDE diesen Sketch lade sehe ich in CuteCom (mit 9600Baud) keine Ausgabe des Bootloaders aber die Ausgabe vom Programm ist sichtbar.
Viele Grüße
Bernd
Falls das interessant ist, die CPU ist auf 80Mhz eingestellt.
Wenn ich mit der Arduino IDE diesen Sketch lade sehe ich in CuteCom (mit 9600Baud) keine Ausgabe des Bootloaders aber die Ausgabe vom Programm ist sichtbar.
Code: Alles auswählen
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("Hello World with 9600 Buad");
delay(1000);
}
Bleibt bei mir die Frage wie stelle ich den UART um und warum funktioniert die Kombination uart_cfg.baud_rate := 115200; mit der Einstellung 74880 in CuteCom.Und beim Boot wird immer mit 74880 gearbeitet, erst beim Benutzer Programm kann man den UART umstellen.
Viele Grüße
Bernd
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Jetzt geht's!!!
Ich hab den ESP mal in der Arduino IDE mit vorher löschen beschrieben und dann in Lazarus mit:
neu geflasht.
Wenn ich 9600 so eingebe bekomme ich in CuteCom auch bei 9600Baud eine korrekte Ausgabe! Den Bootloadertext sehe ich natürlich nicht.
Viele Grüße
Bernd
Ich hab den ESP mal in der Arduino IDE mit vorher löschen beschrieben und dann in Lazarus mit:
Code: Alles auswählen
uart_cfg.baud_rate := (9600*40) div 26;
Wenn ich 9600 so eingebe bekomme ich in CuteCom auch bei 9600Baud eine korrekte Ausgabe! Den Bootloadertext sehe ich natürlich nicht.
Viele Grüße
Bernd
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Hallo zusammen,
ein Grund warum ich mit der Einstellung der Baudrate so Probleme hatte/habe ist das scheinbar Linux 74880 nicht so ohne weiteres unterstützt. Ich habe nun gemerkt das auch Synaser die Baudrate 74880 nicht unterstützt. Ich kann es zwar eingeben und es kommt kein Fehler aber es bleibt die zuletzt eingestellte Baudrate aktive.
Kennt jemand eine Möglichkeit unter Linux eine benutzerdefinierte Baudrate einzustellen?
Viele Grüße
Bernd
PS: die Standart Baudraten gehen alle. Ist also nur ein kleines Problemchen.
ein Grund warum ich mit der Einstellung der Baudrate so Probleme hatte/habe ist das scheinbar Linux 74880 nicht so ohne weiteres unterstützt. Ich habe nun gemerkt das auch Synaser die Baudrate 74880 nicht unterstützt. Ich kann es zwar eingeben und es kommt kein Fehler aber es bleibt die zuletzt eingestellte Baudrate aktive.
Kennt jemand eine Möglichkeit unter Linux eine benutzerdefinierte Baudrate einzustellen?
Viele Grüße
Bernd
PS: die Standart Baudraten gehen alle. Ist also nur ein kleines Problemchen.
-
- Beiträge: 6989
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Unit Serial und ESP8266
Ich denke das ist Abhängig von Controller den du hast. Mit so Pseudo UART konnte ich bis 2'00'000 hoch. Dies war so viel ich weis beim Arduino Uno.Ich habe nun gemerkt das auch Synaser die Baudrate 74880 nicht unterstützt. Ich kann es zwar eingeben und es kommt kein Fehler aber es bleibt die zuletzt eingestellte Baudrate aktive.
Dann gibt es auch Controller wie bei Arduino Leonardo, das speilt es keine Rolle was man angibt, der Speed ist immer gleich.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 631
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Unit Serial und ESP8266
Hallo Matthias,
danke für deine Antwort. Mit Pseudo Uart meinst du wahrscheinlich die Pins selber zu programmieren um damit eine Schnittstelle selber nach zu bauen. Ich habe so was schon in deinem Code gesehen.
Was ich momentan suche ist eigentlich nur eine Möglichkeit unter Linux die 74880 einstellen zu können. Geb ich ins Terminal ein passiert folgendes:
Linux und auch Synaser unterstützten standartmäßig diesen Baudwert nicht. Programme wie CuteCom können das aber. Mich würde interessieren wie die das machen.
Eventuell hat jemand noch ein paar gute Links zum Nachlesen. Alles was ich bis jetzt gefunden habe, habe ich entweder nicht verstanden oder es hat nicht funktioniert.
Viele GRüße
Bernd
danke für deine Antwort. Mit Pseudo Uart meinst du wahrscheinlich die Pins selber zu programmieren um damit eine Schnittstelle selber nach zu bauen. Ich habe so was schon in deinem Code gesehen.
Was ich momentan suche ist eigentlich nur eine Möglichkeit unter Linux die 74880 einstellen zu können. Geb ich ins Terminal
Code: Alles auswählen
stty -F /dev/ttyUSB0 74880
Linux und auch Synaser unterstützten standartmäßig diesen Baudwert nicht. Programme wie CuteCom können das aber. Mich würde interessieren wie die das machen.
Eventuell hat jemand noch ein paar gute Links zum Nachlesen. Alles was ich bis jetzt gefunden habe, habe ich entweder nicht verstanden oder es hat nicht funktioniert.
Viele GRüße
Bernd
- af0815
- Lazarusforum e. V.
- Beiträge: 6886
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Unit Serial und ESP8266
Man kann sich im Paket laz_synapse mal synaser.pas ansehen. Dort wird bei Linux im Bereich der Zeile 1660 die Baudrate kontrolliert (TermiosToDcb), ob die mit den vorgegeben Werten zusammenpasst. Ich gehe davon aus, wenn man dort ansetzt kann man die krummen Werte auch rein bringen. Wenn es CuteCom zusammenbringt, so geht das auch mit Synaser.wennerer hat geschrieben: Mi 30. Jul 2025, 06:40 Linux und auch Synaser unterstützten standartmäßig diesen Baudwert nicht. Programme wie CuteCom können das aber. Mich würde interessieren wie die das machen.
Eventuell hat jemand noch ein paar gute Links zum Nachlesen. Alles was ich bis jetzt gefunden habe, habe ich entweder nicht verstanden oder es hat nicht funktioniert.
Weil es wird ein Device Control Block (DCB) erstellt bzw. parametriert und dem System per ioctl übergeben. Siehe auch https://man7.org/linux/man-pages/man2/ioctl.2.html , also kein Hexenwerk, das wird das CuteCom auch so machen. Also wenn es dort geht, geht es hier auch, man m,uss nur die Checks adaptieren (oder übergehen).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).