Tento projekt vznikl trošku netradičně – začátek tohoto roku jsem trávil upoutaný na lůžku, ale – asi to většina z vás zná – přes to, že je tělu mizerně, tak mozek se zastavit nedá. Obklopený články z internetu o long range bezdrátových komunikacích a neslavném konci projektu Turris Gadgets jsem dostal nápad, přispět také svojí troškou do mlýna. Stanovil jsem si následující cíle:
- NEdělat zařízení ve formě USB donglu – jednak to zabírá cenný USB port a druhak to na mě působí jako nouzové řešení, když jsou zde jiné možnosti připojení
- Naučit se (čti “pohrát si s”) nějaký zajímavý mikrokontrolér, se kterým jsem ještě nepracoval
- Rozšířit svoje znalosti o Embedded Linuxu
Jakmile se mi tedy udělalo natolik dobře, že jsem mohl zasednout k počítači, dal jsem dohromady zařízení, které vám předkládám…
Abych dodržel bod 1 plánu, rozhodl jsem se po studiu schématu Turris Omnia vytvořit zařízení ve formátu Mini PCI-E karty, která je ve standardně osazeném Turrisu volná pro GSM modem. Většina lidí očekává od PCI-E složitý HW, jenomže tak to nemusí být – slot obsahuje i rozhraní, které jsou v běžných mikrokontrolérech (USB, I2C/SMB) jak ukázal skvělý projekt PCIeDuino – mimochodem layout desky jsem převzal právě z PCIeDina – many thanks Gergley for Your great work!
Druhý bod se mi podařilo splnit tím, že jsem objevil procesor Atmel SAMD21 – Cortex M0 jádro, flash i RAM o dostatečné velikosti, výkon pro běh LoRa gateway také dostatečný, navíc je procesor levnější, než ATmega328P.
Celkové zapojení je KISS (Keep It Stupid Simple) a v podstatě k němu není co říct:
Prakticky jde o katalogové zapojení procesoru s připojeným USB a I2C rozhraním na Mini PCI-e konektor, RFM69/RFM95 rádiovým modulem a JTAG konektorem. Za jedinou zmínku, nebo spíše vysvětlení, stojí stabilizátor 3V3 a USB rozhraní, vyvedené na hřebínek – obojí je pro finální produkt zbytečné a slouží jen k usnadnění ladění firmware mimo Turris Omnia (nebyl jsem si jistý – a stále nejsem – dostupností překládacích nástrojů přímo na TO, potažmo OpenWRT platformě). Moje “ladící” sestava tedy vypadá nějak takto:
Plošný spoj je navržený v Kicadu, vyrobený v SeeedStudiu a osazený na Moravě součástkami z AliExpress 🙂 (mimo procesor, ten je z TME).
Z AliExpressu jsem také objednal vhodnou anténu a konektor s kablíkem (viz. titulní obrázek).
Oživení procesoru (“Hello World” embedded světa – obyčejné blikání LED) jsem pak realizoval v AtmelStudiu za pomoci Atmel Start, který mi umožnil skutečně rychlé vygenerování startovacího kódu a knihovny pro snadný přístup k GPIO.
Pak ovšem přišla ta složitější část – USB rozhraní. Tady jsem si vypomohl trikem. Procesor stejné třídy obsahuje Arduino Zero deska, takže jsem vypálil zavaděč, určený pro Arduino Zero a… tadááá – na PC se normálně objevilo rozhraní, umožňující nahrání programu. Znamená to tedy, že firmware je možné vyvíjet i v Arduino IDE.
Dalším krokem byla instalace do Turrisu a test, zda rozpozná CDC sériový port, emulovaný v SAMD procesoru.
Instalace proběhla bez větších obtíží…
Jediné, co bych mohl vytknout je to, že ten, kdo montoval sloupky na PCB Turris nedotáhl jednu matičku ze spodní strany, takže jsem musel odmontovat celý PCB 🙁 . Montáž antény proběhla bez jakýchkoliv potíží a, díky správnému otvoru v zadní stěně Turrisu, nehrozí její protáčení, jako u antény WiFi.
Kablík k anténě je možná až zbytečně dlouhý, ale zase tolik nepřekáží…
Celkový pohled na instalaci pak vypadá takto:
No a dále přišlo na řadu otestování, zda Turris uvidí v seznamu USB zařízení nově přidaný HW…
Jak je vidět, tak vidí 🙂 , takže se dál můžu soustředit na firmware a hlavně bod tři původního plánu.
Věci, co se tak úplně nepovedly
Tradičně musím uvést i to, s čím nejsem příliš spokojený – v tomto projektu je to (zatím) naštěstí jen jedna věc. Zavaděč Arduino Zero vyžaduje pro svoji aktivaci dvojí reset – na originální desce Arduina se to dělá dvojitým stiskem tlačítka Reset, které ovšem na desce TOLoRa není 🙁 . Je to chyba, ale naštěstí jen drobná – tento postup se používá jen při ladění/nahrávání nového firmware, takže pro finální produkt už bude zbytečný.
A co dál…
V první řadě najdete na konci článku kompletní projekt HW v Kicadu ke stažení. Protože ale právě intenzívně dokončuji jiný projekt a v nejbližší době nebudu mít prostor k práci na TOLoRa, rozhodl jsem se udělat tuto nabídku:
Pokud má někdo VÁŽNÝ zájem o realizaci FW, případně i SW, ať mě kontaktuje na kontaktní mail – pokud se jednomu ze zájemců podaří mě přesvědčit, že jde o reálný zájem a ten člověk na to skutečně má, pošlu mu zdarma osazenou desku (RFM95 budu muset objednat, takže to chvíli zabere). Mojí podmínkou je, že výsledný firmware bude pod Open Source licencí a bude uveřejněný na těchto stránkách…
Amazing! 😀 Really glad that the PCIeDuino design helped, and LoRa is awesome.
Thank You Gregly. Actually PCB design was pretty simple using Your mini PCI-e template 🙂 …
Tohle je vlastně něco co bych asi užil, ale ve spolupráci s raspberry Pi, takže klasický USB, ale to je snad jedno.
Mám tady několik RMF69HW co mi zůstalo z projektu EMON rád bych je použil k obousměrné komunikaci třeba s termostatem, řízení světel, indikace a ovládání garážových vrat… Otázka je, jestli je lepší nody konstruovat s nějakým attiny nebo arduino nano, který je skoro levnější.
No USB je vyvedený, takže to klidně použít jde. U procesoru jsem se taky zarazil, ale ten SAMD byl hodně levný. U toho Nano bude problém se spotřebou – tvořím venkovní čidlo s 328p a bez zásadního bastlení na hotovém nanu se to nedá použít, takže nakonec vyhrála speciální konstrukce…
Hezké, ale možná by to chtělo i plechovku na ten modul, tohle by přes EMC nespíš neprošlo. Já také uvažuji o něčem podobném, ale jsem zatížen na STM32, takže budu mít jiný HW k tomu modulu RFM95W co tu mám na stole. Zítra se půjdu (teda už dneska jak koukám) juknout na hackhathon na Smíchov, snad tam načerpám nějaké informace.
Ano, možná by to stínění chtělo, ale v Holland Shielding pro mě neměli nic vhodného (tedy rozumně levného) a když bych to dělal na koleně, tak bych zase překročil povolenou výšku dle specifikace mini pcie (i když zrovna v Omnii by to nevadilo, protože tam je místa spousty)… Bylo něco zajímavého na hackathlonu?