Přijímač čekal na poličce
TX jsem začal rovnou stavět na Lolinu S3 Mini. RX jsem ale nemusel zapojovat znovu. Z prvního seznamování s nRF24 o rok dříve mi na poličce zůstal stále propojený ESP32 breadboard. Stačilo jej sundat, nahrát nový software a využít jednu z mála situací, kdy se vyplatilo starý pokus nerozebrat.
Nechtěl jsem na stole předstírat hotový RC systém. Potřeboval jsem odpověď na jedinou otázku: zvládne tenhle hardware připravený payload dostat tam i zpět dostatečně rychle a bez ztrát? Pokud ne, nemělo smysl řešit serva, menu ani desky.
Nejdřív prázdná obálka
Nejdřív jsem neposílal řízení, plyn ani skutečnou telemetrii. Obě strany si jen pinkaly dummy obsah ve strukturách o zamýšlené velikosti. TX poslal paket a RX okamžitě odpověděl přes ACK payload nRF24. Právě u něj mi došla hlavní výhoda: odpověď nemusím stavět jako druhé nezávislé rádio. Může být přirozenou součástí každého řídicího cyklu.
Obousměrnou komunikaci jsem proto testoval od úplného začátku, ne jako funkci navíc. Tehdejší struktury měly přibližně 12 B směrem k přijímači a 9 B zpět. Jejich význam mě zatím nezajímal. Sledoval jsem, zda celá obálka projde, odpověď se vrátí a ACK počítadlo zůstane na 100 % bez pozorované ztráty paketů.
Nejdřív jsem ověřil velikost, čas a oba směry komunikace. Teprve potom jsem začal řešit, co každý bit znamená.
Paket se nestaví podle počtu serv
Při skládání prvního payloadu mi došlo, že paket nemám stavět podle počtu serv. Řízení a plyn jsou proporcionální, takže u nich potřebuji jemnou polohu. Uzávěrky diferenciálů a dvourychlostní převodovka ale mají jen několik smysluplných stavů. Posílat jim pokaždé celé 12bitové číslo by bylo jen drahé pojmenování pro ON a OFF.
Řízení a plyn využité od začátku, další dvě osy připravené do budoucna.
Přední a zadní uzávěrka, rychlý/pomalý převod a další jednoduché požadavky.
Přijímač sám převede stav na nastavenou polohu příslušného výstupu.
Místo tří dalších 12bitových poloh jsem proto poslal jen několik bitů. TX neposílá
konkrétní PWM, ale záměr. Koncové polohy držím v RX, který stav převede na správnou
polohu serva a zpátky potvrdí, co opravdu aplikoval. Tady vznikl zrcadlový princip
protokolu: dopředu REQ, zpět ACT.
Z 10 ms na 5 ms
Začal jsem opatrně s periodou 10 ms. Neměl jsem důvod střílet od boku rychlejší hodnotu, dokud jsem nevěděl, kolik celý cyklus opravdu stojí. Časovače v programu ukázaly přibližně 1 850 µs pro kompletní výměnu s daným payloadem. Do 5ms okna se tedy rádiová práce vešla s použitelnou rezervou.
Nebylo to měření osciloskopem. Věřil jsem časovačům v kódu, měřil délku radio tasku, sledoval vytížení procesoru a hlavně stabilní obousměrnou výměnu se 100% ACK. Na základě těchto dat jsem stáhl periodu na 5 ms a dostal komunikaci na 200 řídicích cyklů za sekundu. Ne proto, že 200 Hz vypadá dobře v tabulce, ale protože jsem věděl, že se do něj rádio skutečně vejde.
Teprve potom přišla skutečná data
Když prázdné obálky držely časování, začal jsem je plnit. TX základ tvořily čtyři 12bitové osy, dva osmibitové bloky pro stavy a hlášky, čítač zpráv a kontrolní součet. Z os jsem zpočátku reálně používal jen řízení a plyn. Další dvě už ale měly svoje místo, aniž bych kvůli nim později musel překopat základ celé zprávy.
Z RX jsem vracel baterii, stavová pole, CRC8 a dvě rezervovaná místa pro plánovaný náklonoměr. Ten jsem nakonec z projektu vypustil. Placeholdery po něm ale hezky ukazují, že první protokol nebyl vytesaný do kamene. Připravoval jsem si prostor, zkoušel nápady a některé z nich potom bez sentimentu zahodil.
Pro praktický důkaz mi stačila dvě serva a stavové výstupy. Cílová specifikace počítala se šesti servo výstupy, ale šestkrát opakovat stejný funkční princip by mi už žádnou novou informaci nedalo. Potřeboval jsem ověřit princip, ne natočit servo orchestr.
Dva pětisekundové důkazy
Z téhle fáze mi zůstala dvě krátká videa pořízená dva dny po sobě. Na prvním je breadboard, rozpracovaný software a návrat telemetrie. Druhé už zachycuje kompletní bezdrátový end-to-end test. Pět sekund videa, za kterými bylo podstatně víc hodin koukání do čítačů, časů tasků a ACK statistik.
Když jedno SPI nestačí
V prvním TX zapojení jsem nechal displej a nRF24 sdílet SPI. Technicky to možné bylo. Prakticky jsem ale nutil dvě časově citlivé periferie bojovat o jednu sběrnici právě ve chvíli, kdy jsem chtěl držet pravidelný rádiový cyklus. Fungovalo to dost na test a zároveň dost špatně na to, abych tomu přestal věřit.
Lolin S3 Mini měl naštěstí pinů dost, takže jsem displeji přidělil vlastní SPI a rádio nechal v klidu na jeho sběrnici. Nebyla to jediná možná cesta, ale pro tenhle projekt byla čistší a hlavně předvídatelnější. Současně jsem začal řešit napájení rádiových modulů a vybírat součástky pro budoucí desky.
Jakmile komunikace i základní hardware fungovaly, nepájivé pole splnilo svůj účel. Další krok vedl do KiCadu a odtud velmi rychle k tiskárně, která ještě netušila, že z ní bude plotter.