Unit Serial und ESP8266
-
- Beiträge: 628
- 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: 628
- 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: 628
- 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: 6877
- 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: 628
- 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: 628
- 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: 6877
- 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: 628
- 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: 628
- 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