Unit Serial und ESP8266

wennerer
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

Beitrag von wennerer »

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

wennerer
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

Beitrag von wennerer »

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:

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.
Viele Grüße
Bernd

schoschy
Beiträge: 59
Registriert: Di 18. Okt 2022, 15:46

Re: Unit Serial und ESP8266

Beitrag von schoschy »

ich hab mal eben bei mir über eine unit geschaut:

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;    
mir fällt noch LinuxLock ein, ist per default auf true, sollte aber nicht das problem sein.

wennerer
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

Beitrag von wennerer »

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:

Code: Alles auswählen

uart_cfg.baud_rate  := (115200*40) div 26;
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

Benutzeravatar
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

Beitrag von af0815 »

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).

wennerer
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

Beitrag von wennerer »

Vielen Dank für den Link. Da muss ich wohl noch etwas stöbern und denken :D

Viele Grüße
Bernd

wennerer
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

Beitrag von wennerer »

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):

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.
CuteCom Ausgabe:
CuteCom.png
CuteCom.png (194.69 KiB) 151 mal betrachtet
Viele Grüße
Bernd

Benutzeravatar
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

Beitrag von af0815 »

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).

wennerer
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

Beitrag von wennerer »

Also in der Arduino IDE wird mir 26Mhz angezeigt:
26mhz.bmp
26mhz.bmp (122.22 KiB) 114 mal betrachtet
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);
}
Und beim Boot wird immer mit 74880 gearbeitet, erst beim Benutzer Programm kann man den UART umstellen.
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.

Viele Grüße
Bernd

wennerer
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

Beitrag von wennerer »

Jetzt geht's!!!
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;
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

Antworten