logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] ESP32S-WROOM nie widzi OBD2 przez BluetoothSerial - jak rozwiązać?

hepos 18 Lut 2024 08:13 1491 15
REKLAMA
  • #1 20966453
    hepos
    Poziom 13  
    Posty: 143
    Pomógł: 1
    Ocena: 28
    Witam,
    Zrobiłem prosty skaner obd oparty na Arduino Uno, module BT HC05 oraz ELM327 na bluetooth.
    Moduł HC05 ustawiony jako master, OBDII sparowany komendami AT. Wszystko działa prawidłowo.

    Postanowiłem zminiaturyzować urządzenie i zakupiłem płytkę ESP32S-WROOM z wbudowanym bluetooth. Niestety, używając BluetoothSerial.h nie mogę się połączyć z OBD2 przez bluetooth. Próbowałem wszystkiego. Łączyłem przez MAC, przez nazwę urządzenia, próbowałem z pinem, oraz bez. Skanowalem urządzenia bluetooth korzystając wbudowanego bluetooth i problem jest taki, że podczas skanowania nie widzi tego urządzenia. Co ciekawe gdy podepnę HC05 do ESP32, łączy się bez problemu.
    Czy ktoś miał podobny problem? Użycie BluetoothSerial jest proste i nie widzę tam żadnej konfiguracji poza pinem, baudrate (próbowałem wszystkie od 9600 do 115200) oraz połączeniem za pomocą adresu lub nazwy. Gdzie czytałem że może trzeba użyć starszej biblioteki.
    Czy ESP32 ma jakiś tryb komend AT dla wbudowanego Bluetooth żeby podobnie jak HC05 wymusić sparowanie z urządzeniem na sztywno?

    Dziękuję za odpowiedzi
  • REKLAMA
  • #2 20966929
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 229
    Kup sobie moduł ESP32, który ma zwykły BT, z opisu wynika, że ma BLE: "Płytka ESP32 z wbudowanym modułem ESP-WROOM-32 z obsługą WiFi oraz Bluetooth BLE 4.2". Pierwsze ESP32 WROOM miały BT i BLE, potem powstało wiele wariacji 1/2 rdzenie, WIFI/BLE/BT, różne zegary, ilości RAM i flash.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #3 20966952
    hepos
    Poziom 13  
    Posty: 143
    Pomógł: 1
    Ocena: 28
    Ma to sens - jak znaleźć właściwą wersję? Jest tego pełno. Jakie ma mieć oznaczenie?

    Znalazłem specyfikację tego modułu. Czy mówi ona jednoznacznie, że nie ma BT Classic?
    Zdjęcie ekranu specyfikacji modułu ESP32-WROOM-32.
  • #4 20967128
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 20967165
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 229
    Trafiłem za GOOGLE na jakiś okrojony opis w sklepie, ten moduł faktycznie ma zwykłe BT, wybrałem taką płytkę ESP32s NODE MCU i przykład z BT Serial skompilował się bez problemu. Z płytką, która na pewno ma tylko BLE, jak ESP32_C3 w ogóle się to nie kompiluje.
    Edit:
    Wygrzebałem z szuflady ESP32 DoIt, wgrałem szkic z przykładów ESP32 DiscoverConnect, ustawiony w slave HC-05 podłączyłem do zasilania, ustawienie baudrate w obu modułach nie ma znaczenia, radia dogadują się ze sobą niezależnie od prędkości UART, wykrywa i łączy się z HC-05 bez problemu.
    Skoro HC-05 łączy się z OBD to też powinno działać, tak to wyglada na monitorze:
    
    rst:0x10 (RTCWDT_RTC_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0030,len:1184
    load:0x40078000,len:13260
    load:0x40080400,len:3028
    entry 0x400805e4
    Starting discoverAsync...
    >>>>>>>>>>>Found a new device asynchronously: Name: , Address: 98:d3:36:00:d0:43, cod: 0x001f00, rssi: -36
    >>>>>>>>>>>Found a new device asynchronously: Name: Android TV, Address: cenzura , cod: cenzura  rssi: -82
    Stopping discoverAsync... discoverAsync stopped
    Found devices:
     ----- cenzura Android TV -82
    scanned for services, found 0
     ----- 98:d3:36:00:d0:43   -36
    scanned for services, found 1
         channel 1 (Dev B)
    connecting to 98:d3:36:00:d0:43 - 1
    tx: Hi from esp32!
    tx: Hi from esp32!
    tx: Hi from esp32!
    tx: Hi from esp32!
    tx: Hi from esp32!
    

    Wykrył Android TV, nie wykrył SPP, potem wykrył HC-05 i się do niego sam podłączył. Oczywiście nie mam pinu ustawionego, ale do tego też jest opcja w przykładzie.
    Pomogłem? Kup mi kawę.
  • #6 20967836
    Konto nie istnieje
    Poziom 1  
  • #7 20967862
    hepos
    Poziom 13  
    Posty: 143
    Pomógł: 1
    Ocena: 28
    Czyli skoro to odmiana tradycyjnego ESP32 to BT Classic powinien wspierać, dobrze rozumiem?
  • #8 20967865
    Konto nie istnieje
    Poziom 1  
  • #9 20967873
    hepos
    Poziom 13  
    Posty: 143
    Pomógł: 1
    Ocena: 28
    Dziękuję za potwierdzenie. Zatem, skoro HC05 łączy się z OBDII, to znaczy że z OBDII i kodem wszystko ok.
    Pytanie, dlaczego nie mogę się połączyć z OBDII używając BluetoothSerial.h , np za pomocą tego kodu (oczywiście z podstawionymi danymi mojego OBDII), a kod że ScanBTDevicesClassic nie wykrywa urządzenia? Uszkodzony moduł, czy no źle wybrana płytka z Arduino (jest ESP32 Module Dev)

    https://github.com/espressif/arduino-esp32/bl...mples/SerialToSerialBTM/SerialToSerialBTM.ino
  • Pomocny post
    #10 20967909
    Konto nie istnieje
    Poziom 1  
  • #11 20967931
    hepos
    Poziom 13  
    Posty: 143
    Pomógł: 1
    Ocena: 28
    Z szybkiego researchu w Get started wynika, że będę musiał się zaopatrzyć w USB to serial converter, który kosztuje gorsze ale akurat go nie posiadam. No ale to chyba jedyna opcja, więc spróbuję zakupić
  • Pomocny post
    #12 20967943
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 229
    Próbowałeś wgrać ten przykład DiscoverConnect? U mnie połączył się do slave'a automatycznie.
    Nie wiem jak wgrywałeś soft do tej pory, ale wiele płytek ma konwerter USB-UART wbudowany, niektóre faktycznie mają tylko natywne USB wprost z pinów uC. Masz na płytce CH340 lub CP210x?
    Pomogłem? Kup mi kawę.
  • #13 20967993
    hepos
    Poziom 13  
    Posty: 143
    Pomógł: 1
    Ocena: 28
    Wygrywałem przez upload, normalnie w Arduino IDE. Piszę o tym USB to serial , bo w guide dla znalazłem schemat podłączenia
    Schemat połączenia ESP32-WROOM-32 z komputerem

    Spróbuję wrzucić ten kod i dam znać .

    Dodano po 51 [minuty]:

    Niestety, no nie widzi tego OBDII. Ustawiłem go w kodzie jako master.
    Ekran laptopa z komunikatami błędu w Serial Monitor w Arduino IDE.

    Mam jeszcze jedno znalezisko, do weryfikacji. Na tej stronie jest informacja o BT Classic AT mode.
    Czy to może być coś co mnie dotyczy? https://docs.espressif.com/projects/esp-at/en...elop/How_to_use_ESP_AT_Classic_Bluetooth.html
  • Pomocny post
    #14 20968131
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 229
    Może na początek zrób te same kroki - wbij gwoździa do końca i ustaw HC-05 na slave i sprawdź czy go znajduje, nie mam pod ręką OBDII by sprawdzić, jakich fikołków potrzebuje do wykrycia. Może kupowałeś moduł ESP32S, a przyleciał S2/S3 (wątpię, bo widzę, że nowe moduły się przedstawiają, może wcześniej też, ale informacje nie pojawiały się kiedyś podczas programowania).
    Nie wiem czemu zmieniałeś role na Master, nic o tym nie pisałem, otworzyłem przykład i wgrałem, zadziałało, nie wnikałem czy to ma jakiś sens. Bez sensu byłoby faktycznie gdyby wykrywać miał slave, ale po co poprawiać coś co zadziałało.
    Nie potrzebujesz nic więcej do wgrania gotowego bin, musisz mieć tylko ten plik BIN i programik Espressif Flash Download Tool czy jaki tam znajdziesz w poradniku, jest ich pełno.
    Pomogłem? Kup mi kawę.
  • #15 20969572
    hepos
    Poziom 13  
    Posty: 143
    Pomógł: 1
    Ocena: 28
    Udało się! Dziękuje za sugestie - ponieważ to dzięki pomysłowi i sprawdzeniu kodu DiscoverConnect przez kaczakat ostatecznie się udało. Przedtem nie łączył się z OBD2 ponieważ ESP32 miał jakieś zapamiętane sparowane urządzenia Bluetooth, z poprzednich moich prób. Na początek uruchomiłem kod z przykładów dla BluetoothSerial.h - bt_remove_paired_devices.
    Potem, za sugestią kaczakat wrzucilem example DiscoverConnect. Jako że OBD2 mial być slavem, ustawiłem w kodzie że ESP32 to master (esp_spp_role_t role=ESP_SPP_ROLE_MASTER). To był chyba klucz do sukcesu. Odpaliłem kod i eureka, połączył się z OBD2. Przesłałem do OBD2 komendę ATZ i otrzymałem prawidłową odpowiedź!.
    Solucja dla przyszłych pokoleń:
    Nie udało mi się połączyć z OBD2, używając standardowego sposobu:

    Kod: Arduino
    Zaloguj się, aby zobaczyć kod


    Natomiast używając kodu z przykładu DiscoverConnect - udało się.
    Czyli:
    Kod: Arduino
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #16 20969576
    hepos
    Poziom 13  
    Posty: 143
    Pomógł: 1
    Ocena: 28
    Odpowiedź i solucja znajduje się w moim ostatnim poście.

Podsumowanie tematu

✨ Użytkownik napotkał problem z połączeniem płytki ESP32S-WROOM z urządzeniem OBD2 przez Bluetooth, mimo że wcześniejsze połączenie z modułem HC-05 działało poprawnie. Po analizie dyskusji, okazało się, że ESP32S-WROOM obsługuje Bluetooth Classic, ale niektóre nowsze modele (np. ESP32-C3) mają tylko Bluetooth Low Energy (BLE). Użytkownik został poinstruowany, aby sprawdzić, czy jego moduł obsługuje Bluetooth Classic oraz wgrać odpowiednie oprogramowanie AT. Ostatecznie, po usunięciu zapamiętanych urządzeń Bluetooth i użyciu przykładu DiscoverConnect, udało mu się nawiązać połączenie z OBD2, co potwierdził poprawną odpowiedzią na komendę ATZ.
Wygenerowane przez model językowy.
REKLAMA