Skocz do zawartości

Pyrduino - czyli pythonowy wrapper do arduino-cli


Pomocna odpowiedź

Dobrze jest się przespać i wpaść na pomysł - esptool-ftdi wydaje się działać. Sposób instalacji (trochę nietypowy) opiszę jak wszystko sprawdzę - na razie poprawiony program: pyrduino.tgz

I drobna uwaga:

Przy kompilacji na esp8266 wyskakuje sobie błąd:

xtensa-lx106-elf-g++: error: unrecognized command line option '-std=gnu++17'

Błąd znany, dokładnie opisany swego czasu na githubie od arduino-cli razem z przykładowymi przykładami 😉

Z moich obserwacji:

Błąd wyskakuje, jeśli nie istnieją katalogi build i cache (czyli przy nowym szkicu albo po -clean). Należy po prostu uruchomić kompilację jeszcze raz i powtarzać do skutku - gdzieś za trzecim czy czwartym razem zaczyna normalnie działać. Ewentualnie poczekać aż autorzy arduino-cli poprawią parser receptur...

 

  • Lubię! 2
Link do komentarza
Share on other sites

Z ostatniej chwili:

Arduino-cli w wersji nightly (z dzisiaj) wydaje się działać poprawnie dla esp8266 (tzn. nie ma "unrecognized option"). Ale może to tylko przypadek...

 

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

5 godzin temu, Harnas napisał:

Nie interesowałem się nigdy arduino-cli

Nie interesowałem się nigdy PlatformIO, ale czy on naprawdę jest jakiś ułomny że trzeba do niego wrappery pisać? 😉

Bo np. Arduino IDE 2.x jest tak naprawdę niczym innym jak wrapperem do arduino-cli...

5 godzin temu, Harnas napisał:

przy okazji dając większe możliwości rozwoju

Jakie mianowicie?

 

Link do komentarza
Share on other sites

(edytowany)

No i niestety, arduino-cli cały czas ma problem, ale już znam sposób na szybki workaround (dotyczy to również Arduino IDE 2.x i prawdopodobnie PlatformIO):

Problem występuje, gdy dla różnych architektur istnieją takie same nazwy katalogów tools (w tym przypadku gcc). Rozwiązaniem jest wymuszenie konkretnej wersji (lub usunięcie innych architektur, ale to raczej nie jest dobre rozwiązanie)

Podaję przykład dla esp8266:

  • Znajdź swój katalog arduino15. W linuksie będzie to ~/.arduino15. Dla innych systemów patrz: https://support.arduino.cc/hc/en-us/articles/360018448279-Open-the-Arduino15-folder
  • W katalogu znajdź subkatalog "packages/esp8266/tools/xtensa-lx106-elf-gcc"
  • Otwórz ten katalog. Powinien tam być tylko jeden subkatalog o nazwie w stylu "3.0.4-gcc10.3-1757bed". Skopiuj tę nazwę.
  • Teraz wróć do katalogu esp8266, przejdź do hardware/<jakiś-numerek>/esp8266 i otwórz jakimś edytorem plik platform.txt
  • Znajdź linię rozpoczynającą się od "compiler.path". Powinna wyglądać mniej więcej tak:
compiler.path={runtime.tools.xtensa-lx106-elf-gcc.path}/bin/
  • Zmień doklejając do ścieżki kompilatora skopiowaną nazwę katalogu po myślniku, czyli w moi przypadku:
compiler.path={runtime.tools.xtensa-lx106-elf-gcc-3.0.4-gcc10.3-1757bed.path}/bin/

Arduino-cli będzie teraz szukać kompilatora w konkretnej wersji, a nie pierwszego lepszego.

 

 

Edytowano przez ethanak
  • Lubię! 1
Link do komentarza
Share on other sites

Bardzo lubię nieudokumentowane zachowania różnych fajnych programów...

Takie jedno coś właśnie znalazłem (kiedy arduino-cli ignoruje extra_flags z platform.txt). Mam nadzieję że więcej takich niespodzianek nie będzie.

Jakby komuś się chciało potestować: pytduino.tgz

 

  • Lubię! 1
Link do komentarza
Share on other sites

Coś się dzieje - właśnie testuję możliwość zdalnego uploadu przez RPi (nie zawsze da się użyć OTA). Na razie dla esp8266 i esp32, jeśli wyjdzie to dodam AVR-y.

Wszystkie znaki na niebie i ziemi wskazują, że jutro powinno to ładnie ruszyć 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Dokładnie. Jak skończę wszystkie testy to opiszę.

Zresztą nie musi być RPi, dowolny z Linuksem na pokładzie. 

  • Lubię! 1
Link do komentarza
Share on other sites

Żeby było śmieszniej - znowu bazuję na nieudokumentowanym zachowaniu arduino-cli: parametr --dry-run zniknął z dokumentacji ale na szczęście nie z kodu 🙂

Link do komentarza
Share on other sites

(edytowany)

No więc tak...

Pyrduino używam cały czas i stwierdziłem, że dla kogoś kto woli terminal od klikania myszami jest dużo wygodniejszy niż Arduino IDE, PlatformIO czy co tam ktoś wymyślił.

Brakowało mi jednej rzeczy: jakiegoś sensownego zdalnego programowania moich esp-ków. Niby istnieje cos takiego jak OTA, ale:

  • część ESP (np. wszystkie 8266 w domowej instalacji) nie ma dostępu do sieci (komunikują się po esp-now)
  • część ESP (np. wszystkie 4-megowe ESP32 z syntezą mowy) po prostu nie mają miejsca na partycję OTA.

Ponieważ mam taką miłą przenośną konsolkę z RPi na pokładzie postanowiłem użyć jej jako zdalnego programatora.

pyremote.thumb.jpg.9f1e842d2d2f729dd1f319d7f37d8227.jpg

Oczywiście nie trzeba tam żadnych ekranów czy głośników - na dobrą sprawę wystarczy RPi Zero W, przejściówka USB-OTG i jakieś zasilanie. Trzeba tylko uważać, bo niektóre "oszczędnościowe" Wemosy nie mają diody zabezpieczającej USB, tak więc jeśli siedzą w jakimś zasilanym układzie trzeba się przed tym zabezpieczyć. Ja sobie zrobiłem kiedyś (do drukarki na Arduino) przelotkę USB z niepodłączonym zasilaniem - nadała się idealnie.

Oczywiście najprostsze by było zainstalowanie arduino-cli na RPi - ale takie rozwiązanie nie jest zbyt szczęśliwe. Po pierwsze, trzeba by byłó jakoś synchronizować biblioteki i płytki na obu komputerach (tzn. na tym, na którym pracujemy i na zdalnym), po drugie nawet nie chcę myśleć ile trwałaby na RPi Zero W kompilacja programu, który kompiluje się na moim blaszaku 20 minut.

Postanowiłem więc przegrać na RPi tylko to, co niezbędne do uploadu i napisać kilka prostych skryptów w Pythonie.

Ale najpierw o samym Pyrduino.

W konfiguratorze uploadu dochodzą trzy dodatkowe pola: user, host i serial. Pole user może być puste jeśli ssh jest skonfigurowany tak, że łączy się jako właściwy użytkownik. Wypełnienie pola serial może być zautomatyzowane (czyli "pokaż urządzenia" i kliknięcie właściwego).

I tu uwaga: malinka powinna być skonfigurowana tak, aby logować się bez hasła (kluczem ssl)! 

pyrducfg.thumb.png.f8b0dc216de33885d934f4e88c9a1be2.png

Polecenie ardu przyjmuje nowe argumenty:

ardu -rmt

To polecenie przesyła skompilowany program na RPi i uruchamia funkcję uploadu do podłączonej płytki

ardu [-r] [-b <prędkość>] -rterm

To polecenie uruchamia prosty terminal serial. Prędkość to domyślnie 115200. Opcja -r uruchamia terminal poprzez wrapper readline (konieczna instalacja rlwrap na głównym komputerze) - z reguły wygodniejsze choć nie zawsze.

Aby RPi dostał wszystko co mu potrzebne, należy:

  • uruchomić skrypt pitar.py - utworzy on archiwum espdir.tgz zawierający skopiowane z hosta pliki umożliwiające upload do esp32 i/lub esp8266
  • przegrać archiwum na malinkę
  • zalogować się na malinkę
  • doinstalować python3-serial, usb.ids i socat (jeśli ich nie ma)
  • rozpakować - najlepiej bezpośrednio w katalogu domowym, powinno co prawda działać w innym miejscu ale nie próbowałem
  • wejść do utworzonego katalogu espdir i wykonać polecenie:
./mklink.sh

Utworzą się dodatkowe softlinki w /usr/local/bin/

I to właściwie wszystko... jakieś pytanka?

Oczywiście kody w załączniku: pyrduino2.tgz


 

pyrduino2.tgz

Edytowano przez ethanak
  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.