DIY Zigbee Bridge újratöltve (CC2538)

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 <

cc2538_front.jpg

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:

cc2538_pinout.jpg

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:

cc2538_ready.jpg

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)

cc2538_orig.jpg

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:

https://bitekmindenhol.blog.hu/api/trackback/id/tr3716043588

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

Jol hangzik!

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

Az a pár dollár konkrétan dupla áron van. :) A 2 dolláros programozó mindenkinél megvan már, aki Sonoffot flashelt valaha. De igen láttam őket. Soros programozó mindenképpen kell a program feltöltéshez, de az USB használható utána sima adatkommunikációra. Csak másik firmware kell rá akkor eleve (MODKAMRU_V3_USB-mod.hex). Firmwaret kizárólag soros porton, vagy JTAG-el lehet feltölteni.

vampywiz17 2020.07.27. 21:11:07

@eNeS: Persze dupla, de akkor is kb 6000 Ft rol beszelunk :) ami meg azert nem 13000 Ft mint a keszre szerelt Dongle-k. Azt mondanam, hogy "kozeput" :)

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

Mindaddig lehet UART-on programozni, míg nem küldenek rá egy programot, ami bezárja ezt a lehetőséget.. a chip gyárilag program nélkül érkezett, amiről én írtam. Hogy ez a modell tartalmaz-e rendszert azt nem tudom, de a "Contiki" a nevében jelezheti azt is, hogy tettek már rá egy rendszert, és akkor JTAG-al előbb azt törölni kell...

ssjoci · http://www.vegzetur.hu/?kar=593 2020.09.18. 08:55:54

Üdv, rpi-vel összekötni az usbp és usbn kivezetéseken keresztül lehet?

eNeS 2020.09.18. 19:48:33

Össze lehet kötni
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

More Money Than God 2020.09.19. 16:59:38

FT232-vel is tudnom kellene programozni?

eNeS 2020.09.19. 18:48:46

@More Money Than God: ha adsz a CC2538-nak egy külön 3V tápot, és nincs rajta még program, akkor igen, az FT232-nek is fel kellene küldenie az új programot.

More Money Than God 2020.09.19. 18:54:20

eNeS: köszi, a külön táp alatt azt érted, hogy ne az FT232 VCC lábáról vegyem le a 3,3V-ot?
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

@More Money Than God: Igen, egy külön tápról a 3.3V-ot és GND-ket közösíteni... de mint ahogy a fenti cikkben is többször kiemeltem, ez csak akkor fog menni, ha nincs program az eszközön. Különben csak JTAG-el lehet programozni.

hajasarcu 2020.09.21. 22:40:47

@eNeS: Halihó ! Nekem is hibaüzenetet dobott fel ,de a PA7-re 1kohm - GND ( mivel 3.3V-ot mértem rajta ) és ok !

szenorb 2021.01.29. 20:18:16

@hajasarcu: Helló. Ugyan ez a probléma, nekem nem oldódott meg. OpenOCD RPi -n sikerült Jtag interfészen elérni a 2538-at.
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: az OepnOCD-t még sosem használtam, de azt írják itt: gist.github.com/hwhw/fc43892785aa84913d03495c97b0f25a "telnet localhost 4444", utána be kell állítani a címet "mww 0x400D300C 0x7F800" majd törlés parancs "mww 0x400D3008 0x0205" utána mehet a soros bootloader használat cc2538-bsl.py-vel

szenorb 2021.01.29. 22:52:32

@eNeS: Végig csináltam.
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.

eNeS 2021.01.30. 10:28:11

@szenorb: hát akkor nincs más hátra, openocd-vel kell megflashelni openocd.org/doc/html/Flash-Programming.html

Támogatók:
okosotthon.jpg
allterco.jpg

Utolsó kommentek

  • szenorb: Hello. Bekötöttem 12V-ra , a bemetére egy mozgás érzékelőt kötöttem. Szépen kapcsol a relé a késle... (2023.06.14. 06:48) Shelly okosrelé (Shelly1)
  • Melanoheliophobia: Üdv! Kb. 2 éve vásároltam két ugyanilyen okos izzót. Sajnos az egyik még garancia idő alatt eltávo... (2023.05.03. 16:50) Shelly Vintage okosizzó
  • eNeS: Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalm... (2023.04.02. 08:43) Tasmota szkriptek
  • eNeS: @tomih: Thonnyban rebootot nyomva nekem se megy az NTP. De mikor lekapcsoltam a Thonnyt és rebooto... (2023.04.02. 08:40) Raspberry Pico és a LAN (W5100S-EVB-Pico)
  • krump_lee: Kedves eNeS! ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem talál... (2023.04.02. 08:31) Tasmota szkriptek
  • Utolsó 20

Címkék

433mhz (12) alkatrész (22) alternatív kapcsoló (2) amg8833 (1) analóg (2) android (1) arduinoeasy (5) audio (1) automatizálás (3) bemenet (3) bk7231n (1) ble (1) blitzwolf (4) bluetooth (9) bridge (2) camhi (2) csináld magad (22) dimmer (1) diy (28) do-it-yourself (27) domoticz (11) ds18b20 (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (11) esp8266 (21) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) fogyasztásmérő (5) ftdi (1) füstérzékelő (1) gázérzékelő (1) gpio (1) hang (4) hangjelző (1) hőmérséklet (22) https (1) ikea (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (3) kamera (18) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (21) konnektor (8) lan (9) lángérzékelő (2) led (3) linux (4) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mikrovezérlő (2) milkv (1) mobil (1) mosfet (1) mozgás (5) mpyeasy (4) mq-2 (2) mqtt (3) működtető rendszer (5) multiroom (1) nedvesség (1) neo (1) neopixel (1) Node-RED (1) nvr (4) nyitás (7) okosház (4) okosizzó (3) okosotthon (8) oled (1) onvif (8) openbeken (1) opencv (1) openwrt (4) orange pi (4) páratartalom (6) php (1) pico (1) pi pico (2) poe (1) programozás (9) projekt (25) proximity olvasó (1) python (2) raspberry (14) raspberry projekt (6) raspbian (1) reed (1) relé (27) rf (2) rgb (6) rock pi (1) rögzítő (2) rp2 (1) rpieasy (1) rtc (1) shelly (24) smartwise (1) solid state relay (1) sonoff (20) SonOTA (1) soros (1) ssl (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (3) szünetmentesítés (4) t1 (1) tasmota (8) távirányító (3) Telegram (1) termékteszt (85) termosztát (2) touch (2) ups (5) usb (7) usb hub (1) valós idejű óra (1) vezérlések (20) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (32) ws2812 (1) xiaomi (5) xm (4) xmeye (4) yoosee (1) zigbee (16) zwave (3) Címkefelhő
süti beállítások módosítása