Mivel a Z-Wave eszközök az elmúlt két év alatt sem érték el a vásárlási ingerhatáromat, így egy kicsit most a zigbee eszközökkel ismerkedem. Szó volt már korábban itt az USB csatlakozós CC2531 segítségével történő DIY zigbee átjáró készítéséről, ám ennek a hardvernek van egy apró hiányossága, ami egyébként abból adódik, hogy sosem coordinator-nak szánták a kütyüt, nem véletlenül sniffer programmal érkezik, amit kézileg kellett átütni rajta. Ez pedig a kevés memória és a 8bites régi mikrokontrollere, ami miatt nagyobb eszközszámnál hajlamos belassulni, elveszteni a kapcsolatot.
A közösség ezért folyamatosan keresi az alternatívákat, először a CC1352P-2/CC26X2R1 modelleket kezdte támogatni a zigbee2mqtt alkalmazás, ám ezek árával (~70 dollár szállítással) én például nem igazán vagyok kibékülve.
Orosz kollégák rájöttek, hogy a CC2538 chip is elég erős, és egy külső antennával elég jó hatótáv hozható össze vele. (az adatlapján szereplő 600métert nem tudom mennyire lehet komolyan venni, de jelentősen több, mint a cc2530)
A CC2538-at 5-8 dollárért lehet (szállítással) beszerezni az > Aliexpressen <
Legalább 2, de inkább 3-féle lábkiosztású létezik belőle, erre a bekötésnél figyeljünk, ha nincs rászitázva az aljára melyik láb micsoda, akkor az eladó oldaláról töltsük le a lábkiosztást. Az enyém speciel ilyen:
Szükséges hozzá még egy 2.4Ghz-es IPEX csatlakozójú antenna, ez 2-4 dollárért beszerezhető. Van ugyan PCB antenna is a modulon, ami egy SMD ellenállás átforrasztásával aktiválható, de alapértelmezetten a külső antenna van bekötve.
Egy kis összehasonlítás Zigbee 3.0 firmware esetén:
CC2530 | CC2531 | CC2538 | CC1352P-2 | CC26X2R1 | ConBee II | |
Közvetlen kapcsolódások maximális száma | 10 | 15 | 100 | 50 | 50 | 32 |
Maximális eszközszám a hálózaton (zigbee routereken keresztül) | 40 | 40 | 200 | 200 | 200 | 200 |
MCU | 8051 (24Mhz) | 8051 (24Mhz) | Arm Cortex-M3 (24Mhz) | Arm Cortex-M4F (48Mhz) | Arm Cortex-M4F (48Mhz) | ATSAMR21 ARM Cortex M0+ (48Mhz) |
Flash tárhely (KB) | 256 | 256 | 512 | 352 | 352 | 256 |
RAM (KB) | 8 | 8 | 32 | 80 | 80 | 32 |
Ár | 4,5 USD | 4,5 USD | 6-8 USD | 68-75 USD | 47-62 USD | 45 USD |
Egyéb | Külső antenna | USB, integrált antenna | Külső antenna | USB, külső antenna | USB, külső antenna (zzh! modul az olcsóbb) | USB, integrált antenna |
A korábbihoz hasonlóan persze valahogy fel kell rá küldenünk a szükséges Coordinator firmwaret is, azt azonban máris jelzem, hogy akinek a kép láttán nem lenne egyértelmű: ezen a chipen bizony 1.27mm-es raszterkiosztású pinek vannak, amik forrasztásához jó szem és biztos kéz kell.
Mivel mindegyiknél a CC típus látszik, az ember azt gondolná, hogy a korábban CC2531-hez beszerzett programozó és kábele jó lesz mindhez.. hát nem, a másik sort kell nézni: az MCU-t: ugyanis az újabbakban ARM vezérlő van, amihez alapvetően egy JTAG programozó kell, amihez 9-10 kábelt kellene ráforrasztani erre a gyönyörűséges eszközre. De segond, szerencsére gyárilag ezek a chipek teljesen üresek, így soros programozóval (pl CP2102) minden további nélkül felküldhetjük rá a szükséges programot, mindösszesen 4 db kábel szükséges hozzá!
!!! Ha a chip nem üres, hanem van már rajta egy program, akkor nem fog elindulni a bootloader !!!
Ez esetben vennünk kell egy J-Link Segger V8 USB programozót, amivel felprogramozhatjuk, vagy törölhetjük előbb - mert törlés után a soros bootloader ismét elérhető. [Forrás: Zigbee2MQTT]
A forrasztási készségeim Elek Zoli bácsi főzési képességeivel vetekszenek, viszont hozzá hasonlóan éppen olyan lelkesen művelem én is azt amit csinálok, hiába nem értek hozzá. :) Úgyhogy nagyjából egy órányi sűrű verejtékezést, és az apró lábak védőszentjeinek felmenőinek emlegetését követően sikerült négy darab kábelt ráforrasztanom a szükséges helyekre:
Saját megoldás
Csak összehasonlításképpen az oroszoknak ez szebben sikerült, és zsugorcsővel szépen rögzítették is a kábeleket: (nekik például más lábkiosztású modul jutott)
https://mysku.ru/blog/aliexpress/79984.html
A lényeg az, hogy a következő csatlakozásokat kell létrehozni:
Programozó TX -> CC2538 PA0 (RX)
Programozó RX -> CC2538 PA1 (TX)
Programozó GND->CC2538 GND
Programozó Vcc 3.3 -> CC2538 VDD
Szerencsére GND-ből több is található, amik természetesen közösítve vannak, így nem feltétlenül muszáj közvetlenül a VDD melletti GND-t választani. A PA0 és PA1 viszont egymás mellett vannak, ezekkel nagyon sokat elszórakoztam, hogy ne érjenek össze, ám rendesen kontaktoljon a cucc. Amennyiben a későbbiek során akarjuk még cserélni a rajta levő firmwaret, a PA7-et is érdemes kivezetni, mert ezt kell GND-re kötni ahhoz, hogy a soros bootloader aktiválódjon. (kivéve az első alkalommal, mert ha nincs rajta érvényes program, akkor automatán bootloader módban indul)
Ha ezzel megvagyunk, fogunk egy Linuxos masinát, akár egy RPI is jó, letöltjük a cc2538-bsl programot, telepítjük a függőségeit, majd letöltjük a kétvezetékes soros kommunikációra való firmware-t, ami lehetővé teszi egyúttal a későbbi soros vonali frissítést, valahogy így:
sudo apt install python3 python3-pip git
git clone https://github.com/JelmerT/cc2538-bsl.git cd cc2538-bsl sudo pip3 install pyserial intelhex wget https://raw.githubusercontent.com/MadDoct/zigbee2mqtt-cc2538firmware-modded/master/MODKAMRU_V3_UART-no-flow-control-mod.hex
Ha direktben kötöttük egy Raspberry Pi soros portra az eszközt, akkor /dev/ttyAMA0 lesz, ha USB-s programozóval, akkor /dev/ttyUSB0 lesz a port neve. Én most az USB-set fogom használni.
A BSL program sikeres telepítését követően az alábbi paranccsal tudjuk tesztelni, érzékeli-e a CC2538-at:
sudo python3 cc2538-bsl.py -p /dev/ttyUSB0
Ha igen (és soros bootloader módban van), akkor ehhez hasonló kimenetet fogunk látni:
Opening port /dev/ttyUSB0, baud 500000
Connecting to target...
CC2538 PG2.0: 512KB Flash, 32KB SRAM, CCFG at 0x0027FFD4
Primary IEEE Address: 00:12:4B:00:06:0E:4B:FB
Ezen felbuzdulva már tolhatjuk is fel a korábban letöltött firmware-t az alábbi paranccsal:
sudo python3 cc2538-bsl.py -e -w -v -p /dev/ttyUSB0 -w MODKAMRU_V3_UART-no-flow-control-mod.hex
Amire ezt a választ fogjuk kapni, ha minden OK:
Opening port /dev/ttyUSB0, baud 500000
Reading data from MODKAMRU_V3_UART-no-flow-control-mod.hex
Firmware file: Intel Hex
Connecting to target...
CC2538 PG2.0: 512KB Flash, 32KB SRAM, CCFG at 0x0027FFD4
Primary IEEE Address: 00:12:4B:00:06:0E:4B:FB
Performing mass erase
Erasing 524288 bytes starting at address 0x00200000
Erase done
Writing 524256 bytes starting at address 0x00200000
Write 232 bytes at 0x0027FEF88
Write done
Verifying by comparing CRC32 calculations.
Verified (match: 0x7eb88ab9)
Ne felejtsük el ez után az eszközt újraindítani, USB esetén kihúz-bedug, egyébként táp le-táp fel. Még egy nagyon fontos lépés, a zigbee2mqtt configuration.yaml állományában az eszköz megfelelő portját be kell állítani:
serial:
port: /dev/ttyUSB0
valamint azt is, hogy kétvezetékes soros kapcsolatról van szó, különben nem fog válasz érkezni!
advanced:
rtscts: false
Ha mindent a fentiek szerint állítottunk be, és a firmware sikeresen felszaladt az eszközre, akkor a zigbee2mqtt újraindítását követően ilyesmit fog kiírni:
zigbee2mqtt:info 2020-07-22 21:26:26: Logging to console and directory: '/opt/zigbee2mqtt/data/log/2020-07-22.21-26-25' filename: log.txt
zigbee2mqtt:info 2020-07-22 21:26:27: Starting zigbee2mqtt version 1.14.1 (commit #7e46435)
zigbee2mqtt:info 2020-07-22 21:26:27: Starting zigbee-herdsman...
zigbee2mqtt:info 2020-07-22 21:27:13: zigbee-herdsman started
zigbee2mqtt:info 2020-07-22 21:27:13: Coordinator firmware version: '{"type":"zStack30x","meta":{"transportrev":2,"product":2,"majorrel":2,"minorrel":7,"maintrel":2,"revision":20200327}}'
zigbee2mqtt:info 2020-07-22 21:27:13: Currently 0 devices are joined:
zigbee2mqtt:warn 2020-07-22 21:27:13: `permit_join` set to `true` in configuration.yaml.
zigbee2mqtt:warn 2020-07-22 21:27:13: Allowing new devices to join.
Ebből látható, hogy frankón felismerte a Coordinator eszközt, és az Z-Stack 3.0 kompatibilis.
Ha már használtunk korábban Zigbee 1.2 kompatibilis coordinatort és át akarunk térni Zigbee 3.0-ra, arra azért készüljünk fel lelkileg, hogy minden eszközt újra kell párosítanunk majd...
Tesztjeim szerint a CC2538 CP2102-vel történő közvetlen használata is működik, bár túl van a biztonságos határon. A modul ugyanis max 175mA-t fogyaszt teljes adóteljesítménynél, a CP2102 viszont csak 100mA-t képes leadni a 3.3V lábán, ezért hivatalosan ilyen esetben egy USB5V->3.3V stepdown átalakítót kellene beiktatni a CC2538 tápvonalra. (értsd: a programozás időtartamára teljesen elegendő a 100mA, huzamos, üzemszerű használatra viszont sovány)
Ellenben az új Raspberry Pi-ken a 3.3V-ról maximum 500mA vehető le, így az RPI soros vonalára kötve és a GPIO-járól tápolva (GPIO15, GPIO16, GND, 3V3) az eszköz biztonságosan megtáplálható. (Persze az RPI integrált bluetooth modulját le kell tiltanunk a soros port megfelelő működéséhez!)
A művelet végén azon morfondíroztam, hogy talán nem is olyan sok az a 47 dollár a kulcsra kész, USB csatlakozóval ellátott zzh! modulért. De akkor is megcsináltam, büszke birtokosa lettem egy cirka 10 dolláros, soros portra illeszthető, Zigbee 3.0 DIY Coordinatornak.
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.
vampywiz17 2020.07.27. 12:01:39
Ezt a kettot nezted esetleg?
bit.ly/300IWAg
bit.ly/2D7Dlz1
Ezeknek nem teljesen vilagos, hogy az USB-k hasznalhatoak-e adatkommunikaciora, vagy ezek melle is kell egy Pi vagy egy programozo?
Arban par dollaral lenne tobb ilyen kiszeresben mint CC2538 + antenna + programozo.
eNeS 2020.07.27. 18:20:45
vampywiz17 2020.07.27. 21:11:07
bit.ly/300IWAg
nekem ez szimpatikus, sztm beredelek egyet. Akkor jol ertem, hogy nem kell hozza JTAG, tudom soros porton (UART) is feltolteni ra a Firmware-t?
(Ha megerkezik, egy vendekcikk erejeig sztm akkor be is mutatnam :) )
eNeS 2020.07.27. 23:30:15
ssjoci · http://www.vegzetur.hu/?kar=593 2020.09.18. 08:55:54
eNeS 2020.09.18. 19:48:33
github.com/Koenkk/zigbee2mqtt/issues/1568#issuecomment-497683259
, de 1. programozni nem lehet a beépített usb-jén keresztül, 2. egy külön erre a célra kialakított firmwaret kell feltölteni rá vagy soros vagy JTAG programozóval, ami kezeli az USB-t
eNeS 2020.09.19. 18:48:46
More Money Than God 2020.09.19. 18:54:20
Valami viszont nem az igazi nálam, hibaüzenetet kapok:
sudo python3 cc2538-bsl.py -p /dev/ttyUSB1
Opening port /dev/ttyUSB1, baud 500000
Connecting to target...
ERROR: Timeout waiting for ACK/NACK after 'Synch (0x55 0x55)'
eNeS 2020.09.19. 22:39:25
hajasarcu 2020.09.21. 22:40:47
szenorb 2021.01.29. 20:18:16
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : BCM2835 GPIO JTAG/SWD bitbang driver
Info : clock speed 100 kHz
Info : JTAG tap: cc2538.jrc tap/device found: 0x8b96402f (mfg: 0x017 (Texas Instruments), part: 0xb964, ver: 0x8)
Info : JTAG tap: cc2538.cpu enabled
Info : cc2538.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for cc2538.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : accepting 'telnet' connection on tcp/4444
Hogyan tovább?
eNeS 2021.01.29. 22:14:21
szenorb 2021.01.29. 22:52:32
mww 0x400D300C 0x7F800
mww 0x400D3008 0x0205
ellenőrzés:
mdb 0x400D300C 8
válasz:
0x400d300c: 00 fe 01 00 00 00 00 00
A fórum szerint ez után mehet a soros bootloader használat.
Még sem működik.
Lehet halott a soros port a lapkán.