Open main menu

Contents

Overview

[NOTE]: X729 supports Raspberry Pi 5 hardware also

This is script installation tutorial for X729 shield, it will replace X729 Software installation tutorial, and simplifies the installation process and reduces dependencies on third-party python libraries.

Now we think you have successfully flashed the OS Image into Micro SD and and power on the device, and you have also completed the operations such as creating new user required in some OS. You need to perform the following operations in Terminal.

[Update]:

1. Use gpiod instead of obsolete interface

2. The script now supports the Raspberry Pi OS BOOKWORM version. You just need to uninstall the original script and reinstall it. Please refer to the following:

OPen ternimal window, then run the following command:

mv x729-script x729-script-old
git clone https://github.com/geekworm-com/x729-script
cd x729-script
chmod +x *.sh
./uninstall.sh

Then just follow the installation process below.

3. If you are using it on a Raspberry Pi 5 hardware, make sure to update the 6.6.22 or more high kernel version (uname -a to check kernel version)

sudo apt update
sudo apt full-upgrade
sudo rpi-update

OS that has been tested

  • Raspbian
  • DietPi
  • Manjaro
  • Ubuntu
  • myNode
  • Umbrel
  • Volumio
  • RetroPie
  • Twister

Install

Please follow the steps below:

Enable I2C

Reter to How to enable I2C

NOTE: sample/bat.py will run with error if you don't enable I2C.

Check & review I2C address:

pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- 36 -- -- -- -- -- 3c -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --   

Explaination:

#36 - the address of the battery fuel gauging chip
#3c - address of oled display,This value only exists when the oled is inserted,check if the OLED is inserted in the correct direction if you don't found the above i2c port
#40 - TI INA219 12-bit current/voltage/power monitor
#68 - the address of the RTC chip

Preconfigured config.txt

To install pwm fan, first add dtoverlay=pwm-2chan,pin2=13,func2=4 to /boot/firmware/config.txt under [all] or the end of file and reboot:

sudo nano /boot/firmware/config.txt

Save & exit.

sudo reboot

Install gpiod package

sudo apt install -y gpiod

Clone the script

git clone https://github.com/geekworm-com/x729-script

cd x729-script
chmod +x *.sh

PS: For some OS such as Raspberry Pi OS Lite, the git tool is not installed by default, if you get an error like error: -bash: git: command not found, please run the following command to install the git tool.

sudo apt install -y git

Configuring Different gpipchip number and pwmchip number for Raspberry Pi 5 hardware

If you are NOT using Raspberry 5 hardware, skip this step,or run the following command to set differnt chip and pwm number.

PS: Since 2024-09-02, Raspberry Pi has finally unified the gpipchip to 0 on all Raspberry Pis(Pi, 0, 1, 2, 3, 4, 5). Previously, the gpiochip on the Raspberry Pi 5 was 4.

So we comment out the following command line.

#sed -i 's/xPWR.sh 0 5 12/xPWR.sh 4 5 12/g' x729-pwr.service

PS: But on the Raspberry Pi 5 the pwmchip is still 2, not 0 as used on the Pi 0/1/2/3/4, so you still run the following command if you work on RPi 5 hardware.

sed -i 's/pwmchip0/pwmchip2/g' x729-fan.sh

Create the x729-fan service

x729-fan service is for pwm fan, the pwm fan will automatically adjust the runing speed according to the temperature of the cpu after the service is started.

sudo cp -f ./x729-fan.sh                /usr/local/bin/
sudo cp -f ./x729-fan.service           /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable x729-fan
sudo systemctl start x729-fan

Then the pwm fan starts running.

Create the x729-pwr service

x729-pwr service will be responsible for power management and hardware safe shutdown.

sudo cp -f ./xPWR.sh                    /usr/local/bin/
sudo cp -f x729-pwr.service             /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable x729-pwr
sudo systemctl start x729-pwr

Now, if you press and hold the onboard switch for 3 seconds, then the blue LED will flash slowly and the shutdown is going then all LEDs will be off until the device is completely powered off.

Prepair software shutdown script

sudo cp -f ./xSoft.sh                /usr/local/bin/

Then create a x729off alias command to execture safe shutdown command.

echo "alias x729off='sudo /usr/local/bin/xSoft.sh 0 26'" >>   ~/.bashrc

Run the following command to make the alias x729off effective

source ~/.bashrc

Then you can run x729off to execute software shutdown as follows

x729off

DON'T run the 'shutdown' linux command to shut down, otherwise the power of x729 shield will not be shut down.

Uninstall

./uninstall.sh

Test safe shutdown

Software safe shutdown command:

x729off

DON'T run the 'shutdown' linux command to shut down, otherwise the power of x729 shield will not be shut down.

Hardware safe shutdown operation:

You can verify the safety switch through the onboard switch, press and hold the switch for 3 seconds, then the blue LED will flash slowly and the shutdown is going then all LEDs will be off until the device is completely powered off.

  • press on-board button switch 1-2 seconds to reboot
  • press button switch 3 seconds to safe shutdown,
  • press 7-8 seconds to force shutdown.

Sample Files

The example programs are only suitable for advanced players, and you can construct your own usage scenarios according to the example programs.

[PS]

The old example code uses the RPi.GPIO library, which is currently not supported in kernel 6.6.x, so you may encounter an error when running the following code

sudo python3 sample/plsd.py

Note that you need to provide a different gpiochip number on Pi 0,1,2,3,4 (0) and Pi 5 (4).

For other example programs that use the RPi.GPIO library, it is recommended that you change to the libgpiod version if it runs incorrectly, and we also provide ONLY ONE example using the libgpiod library (plsd-gpiod.py), which you can run as follows:

sudo python3 sample/plsd-gpiod.py

For other example programs that use the RPi.GPIO library, it is recommended that you change to the libgpiod version if it runs incorrectly.


Each example program demonstrates a different function:

read_fan_speed.py: Read the pwm fan running speed;

cd ~x729-script
sudo python3 sample/read_fan_speed.py

pld.py: AC Power supply loss dection script;

cd ~x729-script
sudo python3 sample/pld.py

plsd.py: Auto shutdown when AC power loss or power adapter failure script;(Added auto shuntdown function base pld.py)

cd ~x729-script
sudo python3 sample/plsd.py

buzzer.py: demonstrates how the buzzer will sound when power supply is lost, which is very important in some usage scenarios.

cd ~x729-script
sudo python3 sample/buzzer.py

PS:

1. The above sample python file maybe depends on the third-party python library `Rpi.GPIO`. In the official Raspberry Pi OS and most third-party OS, this library is installed by default. If you run this file and get some errors, try to run the following command to install the Rpi.GPIOy library.

sudo apt-get install -y python3-smbus python3-rpi.gpio

Or you can refer to How to Install RPi.GPIO Python Library

2. The sample program is only to demonstrate how to use the advanced functions of the shield, we do not provide the development function of the sample program.

Enable OLED display

Refer to How to enable OLED display

Set and Read the RTC time

Refer to How to enable RTC

Other

pwm_fan_control.py is no longer used, and are reserved here for research and use by python lovers only.

Support

Email: support@geekworm.com

FAQ

Q: How to login volumio via SSH?

1. Enable SSH:

Visit http://volumio.local/dev/, then click ENABLE SSH button

2. URL connection is IP address, and the default user name is volumio, default password is volumio

Q: How to login to Umbrel via SSH? A: ssh umbrel@umbrel.local (or ssh umbrel@). the default user name is umbrel, default password is moneyprintergobrrr
Q: How to login to myNode via SSH? A: URL connection is IP address, and the default user name is admin, default password is bolt
Q: How to login to DietPi via SSH? A: URL connection is IP address, and the default user name is root, default password is dietpi
Q: Is LibreELEC supported? A: TODO

Other resource

Return to X729 or X729-hardware

Add your comment
Geekworm Wiki welcomes all comments. If you do not want to be anonymous, register or log in. It is free.


 

Anonymous user #5

one hour 7 minutes ago
Score 0  

There is an error in the "Configuring Different gpipchip number and pwmchip number for Raspberry Pi 5 hardware" section.

sed -i 's/pwmchip0/pwmchip2/g' x729-fan.sh

This command is changing pwmchip0 to pwmchip2 value in the x729-fan.sh script. It is incorrect because the Pi 5 board is using pwmchip0 as shown below:

$ sudo cat /sys/kernel/debug/pwm 0: platform/107d517a80.pwm, 2 PWM devices pwm-0 ((null) ): period: 0 ns duty: 0 ns polarity: normal pwm-1 (sysfs ): requested enabled period: 500000 ns duty: 250000 ns polarity: normal

1: platform/1f00098000.pwm, 4 PWM devices pwm-0 ((null) ): period: 0 ns duty: 0 ns polarity: normal pwm-1 ((null) ): period: 0 ns duty: 0 ns polarity: normal pwm-2 ((null) ): period: 0 ns duty: 0 ns polarity: normal pwm-3 ((null) ): period: 0 ns duty: 0 ns polarity: normal

Also, it can be proved according to the journal log where it is clearly seen that the service is failing with error.

Nov 24 01:07:51 pi5 systemd[1]: x729-fan.service: Scheduled restart job, restart counter is at 2. Nov 24 01:07:51 pi5 systemd[1]: Started x729-fan.service - Daemon to monitor and control fan speed. Nov 24 01:07:51 pi5 x729-fan.sh[1639]: Please enable the hardware pwm by adding 'dtoverlay=pwm-2chan' to /boot/config.txt and reboot Nov 24 01:07:51 pi5 x729-fan.sh[1639]: /usr/local/bin/x729-fan.sh: line 160: /sys/class/pwm/pwmchip2/unexport: No such file or directory Nov 24 01:07:51 pi5 systemd[1]: x729-fan.service: Main process exited, code=exited, status=1/FAILURE Nov 24 01:07:51 pi5 systemd[1]: x729-fan.service: Failed with result 'exit-code'

I have changed pwmchip2 back to pwmchip0 in the x729-fan.sh script, but the fan is not working.

sudo systemctl status x729-fan.service ● x729-fan.service - Daemon to monitor and control fan speed Loaded: loaded (/usr/lib/systemd/system/x729-fan.service; enabled; preset: enabled) Active: active (running) since Sun 2024-11-24 02:42:18 UTC; 18s ago Main PID: 4257 (bash) Tasks: 2 (limit: 9063) Memory: 688.0K (peak: 2.1M) CPU: 80ms CGroup: /system.slice/x729-fan.service ├─4257 bash /usr/local/bin/x729-fan.sh └─4442 sleep 5

Could you assist please if the problem with the fan itself or if the script is not working as expected? This is new x729 board that I recently received.
 

Anonymous user #4

2 months ago
Score 0  
I followed the Create the x729-pwr service instructions and its causing my rpi to reboot immediately when powered on. It keeps rebooting forever. I have a RPI4B running debian 11. How do i fix this?
 

Lisa

2 months ago
Score 0  
Hi,Please contact us by email[info@geekworm.com]. Please send installation diagram, screenshots of script installation;and send us your order number.
 

Anonymous user #3

3 months ago
Score 0  
I feel dumb, but I'm able to get it to work once with the detect power loss to shutdown, but after that it doesn't work anymore. How do I fix this?
 

Lisa

3 months ago
Score 0  
Hi,X729 not working? Can't turn on/off?could you please email us with more details. and tell us your order number please.[info@geekworm.com]
 

Anonymous user #1

5 months ago
Score 0  

There is no 'install-ssh.sh script in the Repo linked. Its 'install-sss.sh' and that script makes reference to the X728 instead of X729. I know its just a PRINT statement for user notification but it creates some confusion. Line 9 of that script is also commented out so it doesnt actually create the ALIAS to shutdown the pi and poweroff the UPS. '#echo "alias x79off='sudo /usr/local/bin/xSoft.sh 0 26'" >> ~/.bashrc'

and the Alias its supposed to create is missing the 2 from x729, so telling the user to enter 'x729off' to shutdown wouldnt work even if it did properly create the alias.
 

Harry

5 months ago
Score 0  

Thank you for your detailed correction.

I just modified x728-script to x729-script, and modifed x79off to x729off also.

I did remove the command to create the alias x729off in the install-sss.sh script yesterday, because I found that this command would fail to execute in some Linux environments, and it has happened several times. Now this command needs to be executed manually. I have put it on the wiki page.

I tried to explain why the file on github is incorrect. It is really frustrating that you can't always visit github.com in China, so sometimes submissions fail. But I did test our script and it works fine.

Thank you again for your comments. The correct description of the wiki page is indeed very important, and we will work hard to do better.
 

Anonymous user #2

5 months ago
Score 0  
There are a LOT of errors in this documentation. Documentation does not match up with reality of whats cloned from Git, there are spelling errors in scripts, there are errors thrown by script. These install instructions simply dont work.
 

Harry

5 months ago
Score 0  

Thanks.

I have update 'install-ssh-v1.sh' to install-ssh.sh' on wiki, could you tell more detai.

And we did test the x729 script on pi 5 and pi 4.
 

Anonymous user #1

6 months ago
Score 0  

pi@RasPi4:~/x729-script $ sudo python3 sample/read_fan_speed.py Traceback (most recent call last): File "/home/pi/x729-script/sample/read_fan_speed.py", line 28, in <module> GPIO.add_event_detect(TACH, GPIO.FALLING, fell)

RuntimeError: Failed to add edge detection
 

Harry

5 months ago
Score 0  

Refer to https://gith.../issues/6037,

You can change it with other gpio liberary such as gpiod.

We just provide the sample code, so if you are new to this, ignore it.