Marijnus schreef op woensdag 23 september 2020 @ 15:03:Materialen
- CC2538 module, bijvoorbeeld deze
- CP2102 module, bijvoorbeeld deze, ik koos voor de "CP2102 micro"
- (Eventueel) twee drukschakelaars, bijvoorbeeld zoiets, of zoiets
- Eventueel externe antenne die op je CC2538 module past
- Dunne draadjes. Ik heb spoeldraad gebruikt
- Soldeergereedschap en stabiele handen
Verbinden
Maak de volgende verbindingen tussen de CC2538 en de CP2102:
CC2538 pin | CP2102 pin |
PA0 | TXD |
PA1 | RXI |
GND | GND |
VDD | 3V3 |
Raadpleeg de productpagina van je gekochte CC2538 module om te checken waar deze pins zitten. Er zijn verschillende modules op de markt met verschillende pinouts.
Antenne
Als je een externe antenne hebt gekocht, kun je die aansluiten op de CC2538 module, en dan ben je klaar.
Maar je kunt ook de PCB antenne gebruiken, het bereik hiervan is redelijk goed (een stuk beter dan de CC2531). Hiervoor moet je wel een weerstand verplaatsen:
Standaard wordt de CC2538 zo geleverd:
[Afbeelding]
Om de PCB antenne te gebruiken:
[Afbeelding]
Dus soldeer de weerstand die daar zit los, draai hem 90 graden, en soldeer hem daar vast. Die weerstand is vrij klein, dit was voor mij een behoorlijk priegelwerkje.
Knopjes
We gaan zometeen de CC2538 via UART flashen. Hiervoor moet hij wel in de bootloader komen. Het is handig (maar niet noodzakelijk!) om hiervoor twee pushbuttons te solderen:
Knopje 1 (bootloader knopje) tussen GND en PA7.
Knopje 2 (reset knopje) tussen GND en RST.
Bam! Je bent klaar met solderen! Ik heb de CC2538 en de CP2102 aan elkaar gelijmd met een lijmpistool. Resultaat ziet er bij mij als volgt uit:
[Afbeelding]Firmware
Normaal gesproken moet je de CC2538 flashen via JTAG. Hier heb je een
J-Link apparaat van €10 voor nodig en moet je nog heel veel draadjes solderen. De bootloader heeft echter de mogelijkheid om dit via UART (serieel) te doen. Dat kan dan via de zojuist door jou gesoldeerde CP2102 module en dan hoef je niet meer te solderen. Hiervoor moet de CC2538 wel in bootloader modus staan.
Wanneer er geen (geldige) firmware op de CC2538 geflasht is, gaat hij standaard naar deze bootloader modus. De eerste keer hoef je hier dus niks speciaals voor te doen. Maar als je eenmaal een firmware geflasht hebt, gaat de CC2538 alleen nog in z'n bootloader als er in de firmware een speciaal vlaggetje is aangezet en de bijbehorende pin laag is tijdens het opstarten (daar is dus het bootloader knopje voor nodig). Daarom is het nodig om een aangepaste firmware te flashen: Ik heb deze gedownload vanaf
hier, download "MODKAMRU_V3_UART-no-flow-control_with_SBL.hex".
Let op: Als je dus een firmware flasht waarbij deze flag niet aanstaat, kun je hem alleen nog flashen via JTAG
Voor het flashen gebruik je
deze tool. Klik hier op "code" > " download zip". (of beter nog: clone de repo met git op je pc)
Als je nog geen python op je PC hebt moet je python3 installeren vanaf
hier. Als dat gelukt is installeer je de dependencies:
code:
1
2
| pip install pyserial
pip install intelhex |
Als je al wel een firmware geflasht hebt, moet het apparaat in de bootloader gezet worden:
- Houd de bootloader knop ingedrukt
- Druk kort op de reset knop
- Laat de bootloader knop los
Als het goed is kun je nu je stick flashen. Unzip het eerder gedownloade bestand, en open de map in een terminal. Dan doe je:
code:
1
| python3 cc2538-bsl.py -p [COM poort van je CC2538] -b 115200 -e -w -v [pad naar je firmware .hex] |
Als het programma mekkert over een checksum die niet matcht, is er iets mis gegaan en moet je het opnieuw proberen. Inclusief opnieuw in bootloader zetten met bovenstaande knoppencombinatie.
Zigbee2MQTT config
Als je een andere module gebruikte, moet je in je configuration.yaml eventueel de seriele poort aanpassen:
code:
1
2
| serial:
port: /dev/ttyUSB0 |
Verder kun je nog het volgende toevoegen:
Daarmee moet de boel iets sneller reageren volgens mij de CC2538 heeft meer processing power dus kan dat aan.
Daarnaast moet je al je apparaten opnieuw pairen.
Disclaimer
Ik heb bovenstaande vrij snel getypt uit wat ik er nog van wist. Het kan zijn dat er dingen ontbreken of vaag omschreven zijn.
Laat het me gerust weten als het (niet) gelukt is, of als er dingen onduidelijk zijn!