Rust a RP2040 hobby projekt

luvar

  • ***
  • 240
    • Zobrazit profil
    • E-mail
Rust a RP2040 hobby projekt
« kdy: 09. 12. 2023, 15:47:04 »
Chcel by som vrámci domáceho hobby projektu (cieľom je učiť sa a spravit niečo funkčné na doma) začať s domácou automatizáciou s RP2040 v programovacom jazyku rust (ako začiatocnik, čo dočítava rust book).

Rád by som poprosil nejakých skúsenejších a rozhladenejších rust používateľov o nasmerovanie. Mám dlhoročné (cez 16) skúsenosti s javou a mavenom ako build systémom a viem, že značná časť kvality projektu je v nastavení projektu (convention over configuration). Rád by som korektne nastavený cargo (predpokladám, že aj v mikrokontrolérových projektoch sa používa) projekt s vhodnou zmesou knižníc pre abstrakciu nad HW.

Na začiatok plánujem ovládanie žalúzií, .... Vpodstate ovládanie digitálnych výstupov. Po HW stránke to mám zložené a v micropythone aj odskúšané. Komunikáciu medzi dvoma rpi pico by som rád realizoval cez CAN bus (návrh samotných správ je asi tiež zaujímavý podproblém) a cez CAN to asi vyvediem aj do ethernet-u, ak vznikne taká potreba.

Otázky:
  • Kde hľadať knižnice pre takýto projekt?
  • Ako štrukturovať samotný kód (minimálne prenositeľnosť medzi rôznymi mcu chcem "predpripraviť")?
  • Vhodný spôsob testovania na PC (bez pripojeného HW); myslím unit testy.


alex6bbc

  • *****
  • 1 692
    • Zobrazit profil
    • E-mail
Re:Rust a RP2040 hobby projekt
« Odpověď #1 kdy: 09. 12. 2023, 18:03:44 »

Re:Rust a RP2040 hobby projekt
« Odpověď #2 kdy: 10. 12. 2023, 13:25:58 »
Tedy nezlobte se na mne, ale přijdete mi jako vzorová ukázka toho, jak se to nemá dělat.
Nejdříve si zvolíte pro propojení sběrnici CAN, pak vyberete procesor, který na rozdíl od jiných v sobě řadič sběrnice CAN vůbec nemá, což znamená použít řadič externí nebo emulovat CAN softwarově, což u RP2040 asi lze:

https://github.com/KevinOConnor/can2040

ale patrně pak zas bude problém něco takového hledat v tom exotickém Rustu...

I když namátkou koukám, tak něco by asi bylo:

https://github.com/rust-embedded/embedded-hal/tree/master/embedded-can

A to píšu jako člověk, který má doma všechny regulátory topení propojené sběrnicí též plánovanou pro CAN, ale už sedmým rokem jedu spokojeně přes wifi.
Ale chápu, že se chcete hlavně učit, jen nevím, jestli právě to ovládání žaluzií je zrovna ten správný projekt.

luvar

  • ***
  • 240
    • Zobrazit profil
    • E-mail
Re:Rust a RP2040 hobby projekt
« Odpověď #3 kdy: 10. 12. 2023, 21:13:11 »
Tedy nezlobte se na mne, ale přijdete mi jako vzorová ukázka toho, jak se to nemá dělat.
Nejdříve si zvolíte pro propojení sběrnici CAN, pak vyberete procesor, který na rozdíl od jiných v sobě řadič sběrnice CAN vůbec nemá, což znamená použít řadič externí nebo emulovat CAN softwarově, což u RP2040 asi lze:

Ono som to mal opacne. Pozrel som sa na RP2040, genialny "deep dive" uvod: https://www.youtube.com/playlist?list=PL_tws4AXg7auiZHZsL-qfrXoMiUONBB0U (tvorca emulatoru (rp2040 a par dalsich mcu) https://wokwi.com/ ). Objednal som dva kusky "na hranie" a skoncil som na tom, ze nechem sa ucit/spoznavat nic ine. Naposledy som robil s 8051 a nejake neskorsie pokusy s arduinom, ale level dokumentacie rp2040 je inde... A aj resorsov na nete.

Pre prepojenie dvoch RP2040 som hladal moznosti. Seriova linka vypada fajn. CAN o kusok lepsie, ethernet ako komplikacia a neefektivita. I2C by slo, ale potrebujem sa dostat aj z jedneho poschodia na druhe (8m kablu?). Ono to CAN nie je nutna podmienka ale skor aktualna predstava, ktora vychadza z toho, ze dany protokol sa na nieco podobne uz pouziva a PIO v rp2040 zvlada vselico (aj ethernet https://github.com/holysnippet/pico_eth_doc!)

Potom som zapocal prototyp v micropythone, ale bol som preruseny pracovnymi povinnostami a pomimo toho ma to zavialo smerom k rust-u. Povedal som si, ze tomu jazyku dam sancu, ze na stare kolena si mozno budem chciet splnit sen a programovat nejaky HW, co poleti do vesmiru... A nejako odhadujem, ze za 20 rokov by to tam mohlo byt pouzivane...

To je moja motivacia ist k rust-u; skombinovane: Co som mal doma, to som zlepil a chem pohnut s domacou "automatizaciou" (uz ma nebavi vytahovat zaluzie "skratovacou supravou" v rozvadzaci).

PS: Pod vianocny stromcek som si objednal Raspberry Pico W (rp2040 s wifi). Jednak deti by mohli mat krepe otazky, preco maju ony tri skatulky pod sromcekom a tatino iba knihu a jednak sa budem moct rozhodnut ist cestou mensieho odporu a pouzit wifi na automatizaciu (aspon na prvych 7 rokov :).

PS2: Exoticke, docasne a podobne riesenia: https://www.reddit.com/r/selfhosted/comments/187d7m2/tell_me_your_most_exotic_selfhosted_solution_the/ (u mna vyhralo to, kde za pomoci cdromky ovladali klapku na kureni)

mhi

  • *****
  • 500
    • Zobrazit profil
Re:Rust a RP2040 hobby projekt
« Odpověď #4 kdy: 11. 12. 2023, 10:42:49 »
Ten ethernet mne teda dostal. Videl jsem driv ten projekt s par odpory na ukazku "jak na to". Zjevne to ale lidi vnimaji jako "dobre" reseni. Navic se musim pozastavit nad tim, ze vetsinou kvalita kodu ruznych takovychto bastlu je dost priserna, nekde na hranici experimentalni pouzitelnosti (nemluvim tady o tom ethernetu, ten jsem nevidel).

Ja jsem myslim expert na delani lowcost reseni, kdy se ruzne nedostupne obvody nahrazuji nejakymi bastly, ruzne komunikacni protokoly (napr. SAE J1850) se implementuji ciste softwarove ... ale tohle je moc uz i na mne.

Nic proti, ale ja byt na Vasem miste bych asi zacal necim, co je praxi overene (tzn. treba nejake STM32 s CAN-BUSem), naucil se to na tom, a pak treba zkousel nejake dalsi nevyslapane cesticky.


luvar

  • ***
  • 240
    • Zobrazit profil
    • E-mail
Re:Rust a RP2040 hobby projekt
« Odpověď #5 kdy: 11. 12. 2023, 18:29:50 »
Nic proti, ale ja byt na Vasem miste bych asi zacal necim, co je praxi overene (tzn. treba nejake STM32 s CAN-BUSem), naucil se to na tom, a pak treba zkousel nejake dalsi nevyslapane cesticky.

Dakujem za odporucanie, ale este by som sa spytal, ci by bolo nejake odporucanie na tom RP2040 (beriem, ze bude suboptimalne). Prepojenie medzi dvoma rozvadzacmi (prizemie/poschodie), cca 8 metrov ethernet kablu tam mam a kus optickeho kablu, ak by som sa naozaj nudil a chcel si blikat (ronja?).

Ako laik som odhadol, ze i2c to nemoze davat ani nahodou a ak by som sa chcel kusok pohrat s formatom sprav a parsovanim a podobne, tak seriova linka by mohla byt riesenie. Problem ale kusok vidim aj v tom, ze tam budu asi ine potenciali (dva rozne zdroje su v plane).

Pripadne uvitam akekolvek klucove slova k problematike.

mhi

  • *****
  • 500
    • Zobrazit profil
Re:Rust a RP2040 hobby projekt
« Odpověď #6 kdy: 11. 12. 2023, 22:29:51 »
RS485 https://en.wikipedia.org/wiki/RS-485 a na nem bezi normalni UART, je potreba pripojit transceiver - treba https://ecom.cz/eshop/vse/vyhledavani=RS485 - vyhodne je zvolit 3.3V variantu, resp. na RX pinu udelat ze dvou odporu delicku, ktera z 5V udela 3.3V ; lze pouzit i LIN nebo CAN-BUS transceivery misto tech RS485 (opet je maji i v tom ecomu). Na 8m to vsechny ty sbernice daji zrejme i bez terminace, kdyz na nich pobezi UART treba na 9600 (po kroucenem paru z toho ethernetu).

Prime propojeni pinu RP2040 na takovou vzdalenost jednoznacne povede k likvidaci tech GPIO (staticka el + to co se tam naindukuje z nn rozvodu apod). Proto je nutny ten transceiver.
« Poslední změna: 11. 12. 2023, 22:34:53 od mhi »

alex6bbc

  • *****
  • 1 692
    • Zobrazit profil
    • E-mail
Re:Rust a RP2040 hobby projekt
« Odpověď #7 kdy: 11. 12. 2023, 22:33:54 »
to by mohlo byt zajimave nalepit na opticke vlakno normalni ledku a fotodiodu z druhe strany a udelat si primitovni prenos dat na vzdalenost pomoci tohohle.

luvar

  • ***
  • 240
    • Zobrazit profil
    • E-mail
Re:Rust a RP2040 hobby projekt
« Odpověď #8 kdy: 12. 12. 2023, 10:21:06 »
to by mohlo byt zajimave nalepit na opticke vlakno normalni ledku a fotodiodu z druhe strany a udelat si primitovni prenos dat na vzdalenost pomoci tohohle.

Tiez by som sa rad pobavil timto smerom, ale kusok sa bojim, ze okrem 5 nasobku casu oproti uart/CAN/ethernet verzii by som nedospel k viacmenej spolahlivemu vysledku. Na druhej strane otazka "ako tazke to moze byt blikat si morzeovkou a pridat par samoopravnych kodov a detekciu chyby" je dost provokujuca... Obavam sa ale, ze uz lenjst vhodny kusok HW, kde sa "zapoji" ten opticky kabel a bude do neho blikat nejaka nahodna ledka (a samozrejme na druhu stranu fotorezistor s kuskom "konektoru" by mi zabralo obdobne casu, ako kompletne riesenie cez uart...

Re:Rust a RP2040 hobby projekt
« Odpověď #9 kdy: 12. 12. 2023, 19:07:55 »
Třeba tenhle protokol umí jako jedno z přenosových médií využít i světlo:

https://pjon-wiki.readthedocs.io/en/latest/Home.html

Dokonce pro vysílání i příjem používá jednu a tu samou LED.

mhi

  • *****
  • 500
    • Zobrazit profil
Re:Rust a RP2040 hobby projekt
« Odpověď #10 kdy: 13. 12. 2023, 11:43:21 »
No ja osobne bych pri uceni se neceho noveho snazil omezit na nejnizsi moznou miru ruzne dalsi nezname, tzn. pouzil bych na nauceni se komunikace pres to nejjednodussi reseni (dva RP2040 TX-RX proti sobe] nejaky ceckovy priklad, pak bych tam treba zkusil pridat ten RS485 budic, naucil se jak funguje half-duplex, zkusil bych si reseni kolizi aby mohly oba nody vysilat, pak bych to zkusil prepsat do Rustu, apod.

Kdyz zacnete nejakym projektem jako je ten PJON (a jeste navic s optickym prenosem, ktery ma sva uskali! - jsou na to cela cviceni na VS!!) tak vubec podle meho nazoru nebudete tusit kde muze byt problem.

Navic je potreba dat pozor na to, ze komunitni embedded projetky maji casto znacne pochybnou funkcionalitu. To je asi hlavni vyhoda RP2040, ze to nestaveli amateri, kteri si nekde "tvori" a casto netusi ani co delaji. Dokumentace i SDK k tomu davaji smysl, je to udelane profesionalne.

Re:Rust a RP2040 hobby projekt
« Odpověď #11 kdy: 13. 12. 2023, 15:47:13 »
to by mohlo byt zajimave nalepit na opticke vlakno normalni ledku a fotodiodu z druhe strany a udelat si primitovni prenos dat na vzdalenost pomoci tohohle.

Na jakou dálku to bude fungovat? Nikdy jsem se o optický vlákna nezajímal, ale zní to jako fajn bastl do budoucna.

mmcc

Re:Rust a RP2040 hobby projekt
« Odpověď #12 kdy: 14. 12. 2023, 17:07:26 »
Na experimenty s optikou a "arduinom" by som skusil Toslink / SPDIF . Je to vsak iba jednosmerny prenos, takze na jednu stranu treba receiver, na druhu stranu transmitter. Najlacneisie prevodniky idu vacsinou do 16Mbps pri cca do 10m. Pouziva sa to na prepajanie domacej audio / TV techniky.
Npr nieco z toho https://www.tme.eu/en/katalog/connectors_46/?queryPhrase=spdif

Su aj drahsie "priemyselne" Toslink prevodniky, niektore vedia aj duplex, na vzdialenosti 10-tky, 100-vky metrov, rychlosti 10tky kbit az 100Mbit. https://www.tme.eu/en/katalog/automation_100124/?queryPhrase=toslink