Will be using Raspberry Pi 1 with the cheapest Zigbee CC2531 Sniffer Module I could find d'analyseur de protocole USB pour assistant domestique, HAB ouvert, etc. USB CC2531 Bluetooth 4.0 protocole Analyseur Sniffer Antenne externe
Table of Content
Install OS<
Decided to install to bare Linux, not in a Docker image. The documentation on how to do this is on the Zigbee2MQTT Web siteInstallation Linux.
Installing Node.js
As per About Node.js®, Node.js® is an open-source, cross-platform JavaScript runtime environment.. There's a lot of ® on that site.
Hint that there may be special consideration (Optional) Running as a daemon with systemctl "If you are using a Raspberry Pi 1 or Zero AND if you followed this guide, replace ExecStart=/usr/bin/npm start with ExecStart=/usr/local/bin/npm start." Install NodeJS on a Raspberry Pi Zero NodeJS Support for Pi Zero The Pi Zero uses a Broadcom BCM2835 SoC, which has an ARM processor that uses an ARMv6 instruction set. To install NodeJS, an ARMv6 build is required. However, NodeJS doesn't officially support the ARMv6 build required by the Pi Zero as of NodeJS 12 and later. It has now been demoted to experimental status, and while they do provide unofficial builds on the website, these binaries are automatically generated and could break between releases. So proceed with caution, as these builds aren't fully tested and could cause issues depending on which version of NodeJS you install. If you aren't comfortable running the unofficial builds, you can also install an older version of NodeJS 11.x which still supports the ARMv6 binaries. Install Node.js 10 on Raspberry Pi 1 or zero Node v12? How to install the latest NodeJS on Raspberry PI 0 W? Install NodeJs on your Raspberry Pi 1, 2, 3, 4, zero, and zero wSo first of all which Node.js version to use ?
Node.js supported version #6799 Koenkk in March 2021 Docs were a bit outdated. Current supported node version: 10, 12, 14 (recommended due to being current LTS) and 15 NPM version: 6 and 7 Search all opended and closed issues withis:issue Node.js version label:problem
https://github.com/Koenkk/zigbee2mqtt/issues/17032
I have node.js version 16.18.1, I don't see....
and in his reply Koenkk did not blink, so will try to install that version. but V16 is past end of life.
Install Zigbee2MQTT on a Raspberry Pi Zero W
installs version 16.9, so close enough to give it a go ?
Installing zigbee2MQTT
To install zigbee2mqtt Stéphane uses git.
Here's another way to do it that does not require installing git.
Flashing the Coordinator Firmware onto the CC2531 USB Stick
Supported Adapters
All officially supported adapters are listed on this page. Note that before an adapter can be used with Zigbee2MQTT it has to be flashed with a coordinator firmware (some adapters come preflashed).
The adapters below are well-supported but use outdated chips.
- USB connected
- Texas Instruments CC2531 USB connected Zigbee adapter with PCB antenna Warning 1: requires additional hardware to flash (CC debugger + download cable) Warning 2: might not be powerful enough to handle networks of 20+ devices Warning 3: this adapter has bad range Coordinator firmware Router firmware Flashing instructions
Will not follow the flashing instructions that require a CC debugger, instead will use one of the Alternative firmware flashing methods. The first one of these uses a Raspberry Pi which we happen to have on hand.
Installing WiringPi
zigpi@zigpi:~ $ wget wget https://github.com/WiringPi/WiringPi/archive/master.zip
--2024-01-27 22:09:39-- http://wget/
Resolving wget (wget)... failed: Name or service not known.
wget: unable to resolve host address ‘wget’
--2024-01-27 22:09:39-- https://github.com/WiringPi/WiringPi/archive/master.zip
Resolving github.com (github.com)... 140.82.114.4
Connecting to github.com (github.com)|140.82.114.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/WiringPi/WiringPi/zip/refs/heads/master [following]
--2024-01-27 22:09:40-- https://codeload.github.com/WiringPi/WiringPi/zip/refs/heads/master
Resolving codeload.github.com (codeload.github.com)... 140.82.112.10
Connecting to codeload.github.com (codeload.github.com)|140.82.112.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’
master.zip [ <=> ] 279.84K 1.28MB/s in 0.2s
2024-01-27 22:09:41 (1.28 MB/s) - ‘master.zip’ saved [286554]
FINISHED --2024-01-27 22:09:41--
Total wall clock time: 1.3s
Downloaded: 1 files, 280K in 0.2s (1.28 MB/s)
zigpi@zigpi:~ $ unzip master.zip
Archive: master.zip
91284c42759d3268b09c185ba1d176d54ff59eea
creating: WiringPi-master/
creating: WiringPi-master/.github/
creating: WiringPi-master/.github/workflows/
inflating: WiringPi-master/.github/workflows/build.yml
inflating: WiringPi-master/.gitignore
inflating: WiringPi-master/COPYING.LESSER
inflating: WiringPi-master/INSTALL
inflating: WiringPi-master/People
inflating: WiringPi-master/README.md
extracting: WiringPi-master/VERSION
inflating: WiringPi-master/build
creating: WiringPi-master/debian-template/
creating: WiringPi-master/debian-template/wiringPi/
creating: WiringPi-master/debian-template/wiringPi/DEBIAN/
inflating: WiringPi-master/debian-template/wiringPi/DEBIAN/control
inflating: WiringPi-master/debian-template/wiringPi/DEBIAN/postinst
inflating: WiringPi-master/debian-template/wiringPi/DEBIAN/postrm
creating: WiringPi-master/debian/
inflating: WiringPi-master/debian/.gitignore
inflating: WiringPi-master/debian/changelog
extracting: WiringPi-master/debian/compat
inflating: WiringPi-master/debian/control
inflating: WiringPi-master/debian/copyright
extracting: WiringPi-master/debian/libwiringpi-dev.dirs
inflating: WiringPi-master/debian/libwiringpi-dev.install
inflating: WiringPi-master/debian/libwiringpi2.install
inflating: WiringPi-master/debian/libwiringpi2.shlibs
inflating: WiringPi-master/debian/rules
extracting: WiringPi-master/debian/wiringpi.dirs
inflating: WiringPi-master/debian/wiringpi.install
creating: WiringPi-master/devLib/
inflating: WiringPi-master/devLib/Makefile
inflating: WiringPi-master/devLib/ds1302.c
inflating: WiringPi-master/devLib/ds1302.h
inflating: WiringPi-master/devLib/font.h
inflating: WiringPi-master/devLib/gertboard.c
inflating: WiringPi-master/devLib/gertboard.h
inflating: WiringPi-master/devLib/lcd.c
inflating: WiringPi-master/devLib/lcd.h
inflating: WiringPi-master/devLib/lcd128x64.c
inflating: WiringPi-master/devLib/lcd128x64.h
inflating: WiringPi-master/devLib/maxdetect.c
inflating: WiringPi-master/devLib/maxdetect.h
inflating: WiringPi-master/devLib/piFace.c
inflating: WiringPi-master/devLib/piFace.h
inflating: WiringPi-master/devLib/piFaceOld.c
inflating: WiringPi-master/devLib/piGlow.c
inflating: WiringPi-master/devLib/piGlow.h
inflating: WiringPi-master/devLib/piNes.c
inflating: WiringPi-master/devLib/piNes.h
inflating: WiringPi-master/devLib/scrollPhat.c
inflating: WiringPi-master/devLib/scrollPhat.h
inflating: WiringPi-master/devLib/scrollPhatFont.h
creating: WiringPi-master/examples/
inflating: WiringPi-master/examples/COPYING.LESSER
creating: WiringPi-master/examples/Gertboard/
inflating: WiringPi-master/examples/Gertboard/7segments.c
inflating: WiringPi-master/examples/Gertboard/Makefile
inflating: WiringPi-master/examples/Gertboard/buttons.c
inflating: WiringPi-master/examples/Gertboard/gertboard.c
inflating: WiringPi-master/examples/Gertboard/record.c
inflating: WiringPi-master/examples/Gertboard/temperature.c
inflating: WiringPi-master/examples/Gertboard/voltmeter.c
inflating: WiringPi-master/examples/Gertboard/vumeter.c
inflating: WiringPi-master/examples/Makefile
creating: WiringPi-master/examples/PiFace/
inflating: WiringPi-master/examples/PiFace/Makefile
inflating: WiringPi-master/examples/PiFace/blink.c
inflating: WiringPi-master/examples/PiFace/buttons.c
inflating: WiringPi-master/examples/PiFace/ladder.c
inflating: WiringPi-master/examples/PiFace/metro.c
inflating: WiringPi-master/examples/PiFace/motor.c
inflating: WiringPi-master/examples/PiFace/reaction.c
creating: WiringPi-master/examples/PiGlow/
inflating: WiringPi-master/examples/PiGlow/Makefile
inflating: WiringPi-master/examples/PiGlow/piGlow0.c
inflating: WiringPi-master/examples/PiGlow/piGlow1.c
inflating: WiringPi-master/examples/PiGlow/piglow.c
inflating: WiringPi-master/examples/README.TXT
inflating: WiringPi-master/examples/blink-thread.c
inflating: WiringPi-master/examples/blink.c
inflating: WiringPi-master/examples/blink.rtb
inflating: WiringPi-master/examples/blink.sh
inflating: WiringPi-master/examples/blink12.c
inflating: WiringPi-master/examples/blink12drcs.c
inflating: WiringPi-master/examples/blink6drcs.c
inflating: WiringPi-master/examples/blink8-drcn.c
inflating: WiringPi-master/examples/blink8.c
inflating: WiringPi-master/examples/clock.c
inflating: WiringPi-master/examples/delayTest.c
inflating: WiringPi-master/examples/ds1302.c
inflating: WiringPi-master/examples/header.h
inflating: WiringPi-master/examples/isr-osc.c
inflating: WiringPi-master/examples/isr.c
inflating: WiringPi-master/examples/lcd-adafruit.c
inflating: WiringPi-master/examples/lcd.c
inflating: WiringPi-master/examples/lowPower.c
inflating: WiringPi-master/examples/max31855.c
inflating: WiringPi-master/examples/nes.c
inflating: WiringPi-master/examples/okLed.c
inflating: WiringPi-master/examples/pwm.c
creating: WiringPi-master/examples/q2w/
inflating: WiringPi-master/examples/q2w/Makefile
inflating: WiringPi-master/examples/q2w/binary.c
inflating: WiringPi-master/examples/q2w/blink-io.c
inflating: WiringPi-master/examples/q2w/blink.c
inflating: WiringPi-master/examples/q2w/blink.sh
inflating: WiringPi-master/examples/q2w/bright.c
inflating: WiringPi-master/examples/q2w/button.c
inflating: WiringPi-master/examples/q2w/volts.c
inflating: WiringPi-master/examples/rht03.c
creating: WiringPi-master/examples/scrollPhat/
inflating: WiringPi-master/examples/scrollPhat/Makefile
inflating: WiringPi-master/examples/scrollPhat/scphat.c
inflating: WiringPi-master/examples/scrollPhat/test.c
inflating: WiringPi-master/examples/serialRead.c
inflating: WiringPi-master/examples/serialTest.c
inflating: WiringPi-master/examples/servo.c
inflating: WiringPi-master/examples/softPwm.c
inflating: WiringPi-master/examples/softTone.c
inflating: WiringPi-master/examples/speed.c
inflating: WiringPi-master/examples/spiSpeed.c
inflating: WiringPi-master/examples/wfi.c
creating: WiringPi-master/gpio/
inflating: WiringPi-master/gpio/COPYING.LESSER
inflating: WiringPi-master/gpio/Makefile
inflating: WiringPi-master/gpio/gpio.1
inflating: WiringPi-master/gpio/gpio.c
inflating: WiringPi-master/gpio/pintest
inflating: WiringPi-master/gpio/readall.c
inflating: WiringPi-master/gpio/test.sh
inflating: WiringPi-master/newVersion
creating: WiringPi-master/pins/
inflating: WiringPi-master/pins/Makefile
inflating: WiringPi-master/pins/pins.pdf
inflating: WiringPi-master/pins/pins.tex
inflating: WiringPi-master/update
inflating: WiringPi-master/version.h
creating: WiringPi-master/wiringPi/
inflating: WiringPi-master/wiringPi/COPYING.LESSER
inflating: WiringPi-master/wiringPi/Makefile
inflating: WiringPi-master/wiringPi/ads1115.c
inflating: WiringPi-master/wiringPi/ads1115.h
inflating: WiringPi-master/wiringPi/bmp180.c
inflating: WiringPi-master/wiringPi/bmp180.h
inflating: WiringPi-master/wiringPi/drcNet.c
inflating: WiringPi-master/wiringPi/drcNet.h
inflating: WiringPi-master/wiringPi/drcSerial.c
inflating: WiringPi-master/wiringPi/drcSerial.h
inflating: WiringPi-master/wiringPi/ds18b20.c
inflating: WiringPi-master/wiringPi/ds18b20.h
inflating: WiringPi-master/wiringPi/htu21d.c
inflating: WiringPi-master/wiringPi/htu21d.h
inflating: WiringPi-master/wiringPi/max31855.c
inflating: WiringPi-master/wiringPi/max31855.h
inflating: WiringPi-master/wiringPi/max5322.c
inflating: WiringPi-master/wiringPi/max5322.h
inflating: WiringPi-master/wiringPi/mcp23008.c
inflating: WiringPi-master/wiringPi/mcp23008.h
inflating: WiringPi-master/wiringPi/mcp23016.c
inflating: WiringPi-master/wiringPi/mcp23016.h
inflating: WiringPi-master/wiringPi/mcp23016reg.h
inflating: WiringPi-master/wiringPi/mcp23017.c
inflating: WiringPi-master/wiringPi/mcp23017.h
inflating: WiringPi-master/wiringPi/mcp23s08.c
inflating: WiringPi-master/wiringPi/mcp23s08.h
inflating: WiringPi-master/wiringPi/mcp23s17.c
inflating: WiringPi-master/wiringPi/mcp23s17.h
inflating: WiringPi-master/wiringPi/mcp23x08.h
inflating: WiringPi-master/wiringPi/mcp23x0817.h
inflating: WiringPi-master/wiringPi/mcp3002.c
inflating: WiringPi-master/wiringPi/mcp3002.h
inflating: WiringPi-master/wiringPi/mcp3004.c
inflating: WiringPi-master/wiringPi/mcp3004.h
inflating: WiringPi-master/wiringPi/mcp3422.c
inflating: WiringPi-master/wiringPi/mcp3422.h
inflating: WiringPi-master/wiringPi/mcp4802.c
inflating: WiringPi-master/wiringPi/mcp4802.h
inflating: WiringPi-master/wiringPi/noMoreStatic
inflating: WiringPi-master/wiringPi/pcf8574.c
inflating: WiringPi-master/wiringPi/pcf8574.h
inflating: WiringPi-master/wiringPi/pcf8591.c
inflating: WiringPi-master/wiringPi/pcf8591.h
inflating: WiringPi-master/wiringPi/piHiPri.c
inflating: WiringPi-master/wiringPi/piThread.c
inflating: WiringPi-master/wiringPi/pseudoPins.c
inflating: WiringPi-master/wiringPi/pseudoPins.h
inflating: WiringPi-master/wiringPi/rht03.c
inflating: WiringPi-master/wiringPi/rht03.h
inflating: WiringPi-master/wiringPi/sn3218.c
inflating: WiringPi-master/wiringPi/sn3218.h
inflating: WiringPi-master/wiringPi/softPwm.c
inflating: WiringPi-master/wiringPi/softPwm.h
inflating: WiringPi-master/wiringPi/softServo.c
inflating: WiringPi-master/wiringPi/softServo.h
inflating: WiringPi-master/wiringPi/softTone.c
inflating: WiringPi-master/wiringPi/softTone.h
inflating: WiringPi-master/wiringPi/sr595.c
inflating: WiringPi-master/wiringPi/sr595.h
inflating: WiringPi-master/wiringPi/wiringPi.c
inflating: WiringPi-master/wiringPi/wiringPi.h
inflating: WiringPi-master/wiringPi/wiringPiI2C.c
inflating: WiringPi-master/wiringPi/wiringPiI2C.h
inflating: WiringPi-master/wiringPi/wiringPiSPI.c
inflating: WiringPi-master/wiringPi/wiringPiSPI.h
inflating: WiringPi-master/wiringPi/wiringSerial.c
inflating: WiringPi-master/wiringPi/wiringSerial.h
inflating: WiringPi-master/wiringPi/wiringShift.c
inflating: WiringPi-master/wiringPi/wiringShift.h
inflating: WiringPi-master/wiringPi/wpiExtensions.c
inflating: WiringPi-master/wiringPi/wpiExtensions.h
creating: WiringPi-master/wiringPiD/
inflating: WiringPi-master/wiringPiD/Makefile
inflating: WiringPi-master/wiringPiD/daemonise.c
inflating: WiringPi-master/wiringPiD/daemonise.h
inflating: WiringPi-master/wiringPiD/drcNetCmd.h
inflating: WiringPi-master/wiringPiD/network.c
inflating: WiringPi-master/wiringPiD/network.h
inflating: WiringPi-master/wiringPiD/runRemote.c
inflating: WiringPi-master/wiringPiD/runRemote.h
inflating: WiringPi-master/wiringPiD/wiringpid.c
zigpi@zigpi:~/WiringPi-master $ ./build
wiringPi Build script
=====================
WiringPi Library
[UnInstall]
[Compile] wiringSerial.c
[Compile] wiringShift.c
[Compile] piHiPri.c
[Compile] wiringPi.c
[Compile] piThread.c
[Compile] wiringPiSPI.c
[Compile] wiringPiI2C.c
[Compile] softPwm.c
[Compile] softTone.c
[Compile] mcp23008.c
[Compile] mcp23016.c
[Compile] mcp23017.c
[Compile] mcp23s08.c
[Compile] mcp23s17.c
[Compile] sr595.c
[Compile] pcf8574.c
[Compile] pcf8591.c
[Compile] mcp3002.c
[Compile] mcp3004.c
[Compile] mcp4802.c
[Compile] mcp3422.c
[Compile] max31855.c
[Compile] max5322.c
[Compile] ads1115.c
[Compile] sn3218.c
[Compile] bmp180.c
[Compile] htu21d.c
[Compile] ds18b20.c
[Compile] rht03.c
[Compile] drcSerial.c
[Compile] drcNet.c
[Compile] pseudoPins.c
[Compile] wpiExtensions.c
[Link (Dynamic)]
[Install Headers]
[Install Dynamic Lib]
WiringPi Devices Library
[UnInstall]
[Compile] ds1302.c
[Compile] maxdetect.c
[Compile] piNes.c
[Compile] piFace.c
[Compile] gertboard.c
[Compile] lcd128x64.c
[Compile] lcd.c
[Compile] scrollPhat.c
[Compile] piGlow.c
[Link (Dynamic)]
[Install Headers]
[Install Dynamic Lib]
GPIO Utility
[Compile] gpio.c
[Compile] readall.c
[Link]
[Install]
chown: warning: '.' should be ':': ‘root.root’
All Done.
NOTE: To compile programs with wiringPi, you need to add:
-lwiringPi
to your compile line(s) To use the Gertboard, MaxDetect, etc.
code (the devLib), you need to also add:
-lwiringPiDev
to your compile line(s).
This works in kernel 6.1.0 but it will probably not work in the future because GPIO access via sysfs likely to be dropped in 6.2 on. Fortunateley, there are other methods using the ESP8266 and RP2040 microcontrolers.
Cleaning up.
Testing WiringPi
Connecting the Pi and the USB Stick
Will have to use a custom I/O pin assignment. The connection between
| Raspberry Pi | CC2531 | |
|---|---|---|
| PIN 9 | GND | GDN |
| Pin 13 | GPIO 27 | DD |
| Pin 11 | GPIO 17 | DC |
| Pin 3 | GPIO 2 | RESET~ |
The files cc_chipid, cc_erase, cc_read, and cc_write are all exectable, so there is no nead to build anything.
To quote Jean Michalt, now one can read the CC2531 ID, save, erase and write its flash memory with the following commands.
Of course if the default wiring was used, then the gpio pin parameters should not be used and the commands would simply be as follows.
The session was frozen. Used CtrlC to exit.
Powered up/down the chip and then tried again but with timing change
And tried with router firmware
An issue, writing page 65/128.verification error, corresponds to the encounted problem. Here is the pertinent part of the that last comment.
I saw that my chip was a cc2531 F 128. I bought another USB key with a 256 and it worked.
So my stick has only 128K of flash memory which apparently is not enough.
Using ESP instead of Raspberry Pi with coordinator: Zigbee2Tasmota serves as a gateway
https://ptvo.info/zigbee-configurable-firmware-features/ Zigbee Configurable Firmware Features zigpi@zigpi:~/flash_cc2531-master $ ./cc_chipid -r 8 -c 0 -d 2 -m 300 ID = b522. zigpi@zigpi:~/flash_cc2531-master $ ./cc_erase -r 8 -c 0 -d 2 -m 300 ID = b522. erase result = 00a2. zigpi@zigpi:~/flash_cc2531-master $ ./cc_write -r 8 -c 0 -d 2 -m 300 factory_sniffer.hex ID = b522. reading line 530. file loaded (539 lines read). writing page 5/ 5. flash OK.
BLE Beacons with Tasmota32 - Proof of Concept