ESP8266 wemos odczyt danych z Arduino Pro Mini

Witam. Potrzebuje odczytywać dane (temperatury, moc itp) z płytki arduino pro mini, która stanowi element sterownika. Normalnie zczytuje dane porzez moduł PL2303 który podłączam pod usb do kompa i uruchamiam arduino ide. Chciałbym mieć odczyt zdalny. Podłączyłem jak foto. Czy ktoś może pomóc napisać kod do odczytu danych?

A co z zasilaniem i wersją płytki Arduino Pro Mini?
“This board was developed for applications and installations where space is premium and projects are made as permanent set ups. Small, available in 3.3 V and 5 V versions, powered by ATmega328P.”

Na podstawie Arduino Port Expander — ESPHome :
“The Arduino is connected to the ESP via I²C. Most Arduinos use the A4 and A5 pins for the I²C bus so those pins are not available to read from ESPHome. It is recommended to use a 3.3V I/O level Arduino, however using 5V Arduinos seems to work too. In the latter case you should power your 5V Arduino with 3.3V otherwise you will need a level converter for the I²C bus.”

Na podstawie https://docs.arduino.cc/retired/boards/arduino-pro-mini :
"The Pro Mini has 8 analog inputs. … Additionally, some pins have specialized functionality:

  • I2C: A4 (SDA) and A5 (SCL)"

czyli Twoje połączenie jest niepoprawne - wniosek na podstawie przeczytanej dokumentacji, nigdy w ręce nie miałem tej płytki Arduino.

A kod do czego napisać?

1 polubienie

Na pewno nie masz podciągniętego zasilania 5V-VCC. Wemos z tego co rozumiem wysyła po serialu (TX/RX). Podepnij TX do pinu 2 Arduino, RX do pinu 3 Arduino i wgraj przykład z SoftSerial. Jak podepniesz konwerter z PL2303 do pinów 4 i 5 to powinieneś na nim zobaczyć dane z Wemosa. Tylko ustaw szybkość portów, pewnie 115200 albo 9600:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX
SoftwareSerial mySerial2(4, 5); // RX, TX

void setup()
{
  // Open serial communications and wait for port to open:
  mySerial2.begin(115200);
  while (!mySerial2) {
    ; // wait for serial port to connect. Needed for Native USB only
  }


  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(115200);
  mySerial.println("Hello, world?");
}

void loop() // run over and over
{
  if (mySerial.available())
    mySerial2.write(mySerial.read());
  if (mySerial2.available())
    mySerial.write(mySerial2.read());
}

Arduino jest elementem sterownika i stamtąd ma zasilanie. ESp8266 zasilam z portu mircousb. Potrzbuje kod do esphome (dodatku do HA) do odczytu danych - co wysyła arduino. Skokro arudino wysyła dane i moge je odczytać przez PL2303 to licze na to że esp8266 te dane odbierze i wysle do esphome do HA. Tak bym chciał. Ale programistą nie jestem i być moze tak się nie da. Poprostu nie chce mi się chodzić z kompem i podłączac pod usb i odczytywać dane ze sterownika.

Teraz mam taki kod ale w logach pusto.

esphome:
  name: arduino


esp8266:
  board: d1_mini



# Jedno połączenie szeregowe do zarówno odczytu, jak i wysyłania danych
uart:
  rx_pin: GPIO3  # GPIO pin used as RX (receive) on ESP8266
  tx_pin: GPIO1  # GPIO pin used as TX (transmit) on ESP8266
  baud_rate: 9600  # Adjust the baud rate based on your Arduino Pro Mini configuration
  

# Enable logging only to file, disable serial logging
logger:
  baud_rate: 0 
  level: DEBUG


# Enable Home Assistant API
api:
  encryption:
    key: "e2YQCLqf4sgUNa44leDWx3O4qnsePmMDC6bDQ6bnXmo="

ota:
  password: "8e0b007301283fb6e3dc63ebfdd1fa82"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Arduino Fallback Hotspot"
    password: "S4bokbMCrjbl"

captive_portal:



# Przykładowy przełącznik, który będzie wysyłał dane do Arduino
switch:
  - platform: template
    name: "Arduino Control"
    optimistic: true
    turn_on_action:
      - uart.write: [0x41, 0x42, 0x43]  # Przykładowe dane do wysłania do Arduino po włączeniu przełącznika
    turn_off_action:
      - uart.write: [0x44, 0x45, 0x46]  # Przykładowe dane do wysłania do Arduino po wyłączeniu przełącznika

Całe arduino jest wpięte układ scalony. Ja tylko podpinam się po lewą stronę arduino.

OK, myślałem że dane wysyłasz w drugą stronę :slight_smile: IDE Arduino obsługuje ESP i programuje się je dokładnie tak samo. Dodaj domanagera płytek ESp (ESP8266 – Co to jest? Jak zacząć? Praktyczne informacje ») i wgraj kod:

int incomingByte = 0; // for incoming serial data

void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {
  // send data only when you receive data:
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();

    // say what you got:
    Serial.println(incomingByte, DEC);
  }
}

Jak pojawią się sensowne dane, to jesteś w domu :slight_smile:

Rozumiem że ten kod mam wgrać do płytki arduino?

Nie, do ESP. Arduino z tego co zrozumiałem już obsługuje urządzenie,a Ty chcesz po prostu aby ESP po WiFi przesyłało te informacje do HA.

Jak tak, to ESP musi najpierw “odebrać” sygnał, potem “obrobić” a następnie połączyć się z HA i wysłać dane. Więc proponuję po kolei: najpierw zobaczyć, czy dane do ESP spływają i czy są prawidłowo rozpoznawane - i ten kod powinien to pokazać, jak to wgrasz do ESP to na Monitorze Portu (czy jak to się tam nazywa) powinieneś zobaczyć dane które wysyła Arduino.

Kolego chce zrobić tylko z ESP most WiFi do serwera HA, tak aby zamienić na WiFi połączenie USB.

Ja tak to zrozumiałem.
@lukasx160 - popraw mnie jeśli źle piszę.
Masz już obecnie dane z Arduino w HA?

A, jeszcze jedno - masz kod do tego Arduino, tzn. czy wiesz jak komunikuje się z Twoim urządzeniem? Bo może będzie prościej “przenieść” ten kod do ESP i pozbyć się Arduino.

1 polubienie

To najlepszy pomysł moim zdaniem.

P.S.
Często nie widzimy rozwiązania, bo mamy za mało wiedzy i zawężoną percepcję na problem. Jak widać w tym temacie, kolejny raz skupiamy się i rozpisujemy nad pozornie prostym problemem, bo OP na wstępie nie podaje całego kontekstu. Myślę, że wszyscy powinniśmy zacząć wymagać od zakładających tematy aby podawali wszystkie informacje jakie mają, zebrali i co do tej pory sami zrobili, z jakim skutkiem. Innymi słowy, pełne informacje wstępne.Tak jak to jest np na GitHub.

3 polubienia

Taki właśnie mam cel - ESP odbiera sygnał z arduino - obrabia i wysyła do HA.
Kod do arduino też mam - choć to może być bardziej skomplikowane - bo pewnie trzeba bedzie przypisywać właściwe piny, łączyć… za dużo. Wystarczy mi jak w pierwszym zdaniu.

Komponent serial-to-wifi bridge pod nazwą Stream server for ESPHome nie został włączony do natywnego ESPHome ponieważ obawiano się, że będzie rodził problemy dla niedoświadczonych użytkowników. Z opisów jednak wynika, że możesz go użyć jako custom component for ESPHome.
Miłej lektury:

P.S.
Nadal nie podałeś pełnego kontekstu. To co powyżej, pozwala na stream danych po TCP na określonym porcie. Jeśli znany byłby kontekst, o który prosimy, to pewnie można by dobrać optymalne rozwiązanie. Może dane dałoby się obrobić już w samym ESP i w HA otrzymać gotowe encje. Może jak sugerują koledzy nie potrzebujesz Arduino. Ale widać, że rozwiązania optymalnego nie oczekujesz tkwiąc w przekonaniu, że już je masz.

P.P.S.

A może jednak oczekujesz? :upside_down_face:

1 polubienie

A ja tam bym się pokusił :slight_smile: Arduino i ESP można programować spod ArduinoIDE, więc jak nie masz w kodzie jakichś czarów-marów, to po zmianie pinów powinno ruszyć od strzału. Zobacz czy kod z ProMini w ogóle się skompiluje. Jak tak to już z górki. Może wyłożyć się na bibliotekach, niemniej, jest to do przejścia w 20minut.