Setup the Argon One case for the Raspberry Pi 4B
Info
I assume that the Raspberry Pi 4B is installed inside the case and piCorePlayer (7.x) is installed. Also you know the IP address or the name of this RPi.
Steps
Step 1 - ssh into RPi
- For the first step we need to login to the RPi via ssh—see Access piCorePlayer via ssh.
- This can be done on the Mac with the normal Terminal.app or on a Windows PC with eg. putty. I will describe here only the way to get to the RPi for a Mac.
- So start the Terminal.app, then type
ssh tc@<IP or name of the Pi>
(without the “<” and “>”!) - You will then be asked for the password of the user
tc
which ispiCore
if you didn’t change it.
Step 2 - Create argononed.py
- Then we create the daemon file which is later used to watch for the temperature and for the Power button presses, type
vi argononed.py
. - Once
vi
is started (you see only a few lines with “~” and at the end the filename and a few other things) you pressi
. - Then you change back to this browser window and select the text of the following python file:
#!/usr/bin/python
import smbus
import RPi.GPIO as GPIO
import os
import time
from threading import Thread
bus = smbus.SMBus(1)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
shutdown_pin=4
GPIO.setup(shutdown_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def shutdown_check():
while True:
pulsetime = 1
GPIO.wait_for_edge(shutdown_pin, GPIO.RISING)
time.sleep(0.01)
while GPIO.input(shutdown_pin) == GPIO.HIGH:
time.sleep(0.01)
pulsetime += 1
if pulsetime >=2 and pulsetime <=3:
os.system("pcp rb")
elif pulsetime >=4 and pulsetime <=5:
os.system("pcp sd")
def get_fanspeed(tempval, configlist):
for curconfig in configlist:
curpair = curconfig.split("=")
tempcfg = float(curpair[0])
fancfg = int(float(curpair[1]))
if tempval >= tempcfg:
return fancfg
return 0
def load_config(fname):
newconfig = []
try:
with open(fname, "r") as fp:
for curline in fp:
if not curline:
continue
tmpline = curline.strip()
if not tmpline:
continue
if tmpline[0] == "#":
continue
tmppair = tmpline.split("=")
if len(tmppair) != 2:
continue
tempval = 0
fanval = 0
try:
tempval = float(tmppair[0])
if tempval < 0 or tempval > 100:
continue
except:
continue
try:
fanval = int(float(tmppair[1]))
if fanval < 0 or fanval > 100:
continue
except:
continue
newconfig.append( "{:5.1f}={}".format(tempval,fanval))
if len(newconfig) > 0:
newconfig.sort(reverse=True)
except:
return []
return newconfig
def temp_check():
fanconfig = ["65=100", "60=55", "57=30", "55=10", "30=0"]
tmpconfig = load_config("/home/tc/argononed.conf")
if len(tmpconfig) > 0:
fanconfig = tmpconfig
address=0x1a
prevblock=0
while True:
temp = os.popen("vcgencmd measure_temp").readline()
temp = temp.replace("temp=","")
val = float(temp.replace("'C",""))
block = get_fanspeed(val, fanconfig)
if block < prevblock:
time.sleep(30)
prevblock = block
try:
bus.write_byte(address,block)
except IOError:
temp=""
time.sleep(30)
try:
t1 = Thread(target = shutdown_check)
t2 = Thread(target = temp_check)
t1.start()
t2.start()
except:
t1.stop()
t2.stop()
GPIO.cleanup()
- Then you press “Command-C” (on the PC it would be “Control-C”) and change back to the Terminal.app window.
- There you simply press “Command-V” (on the PC it would be “Control-V”).
- Now you should see the python file inside your editor.
- Now press
ESC
, then type:wq
.
Warning
It has been reported that in later versions of pCP you may need to change:
temp = os.popen("vcgencmd measure_temp").readline()
to temp = os.popen("/usr/local/bin/vcgencmd measure_temp").readline()
See Setup the Argon One case for the Raspberry Pi 4B, argoned.py correction
Step 3a - Create argononed.conf
- Then we create the fan configuration file which is later used to control at which temperature the fan should be set which fan speed, type
vi argononed.conf
. - Once it is started (you see only a few lines with “~” and at the end the filename and a few other things) you press
i
. - Then you change back to this browser window and select the text of the following configuration file:
#
# Argon One Fan Configuration
#
# List below the temperature (Celsius) and fan speed (in percent) pairs
# Use the following form:
# min.temperature=speed
#
# Example:
# 30=0
# 55=10
# 57=30
# 60=55
# 65=100
#
# NOTE: Lines beginning with # are ignored
#
# Start below:
30=0
55=10
57=30
60=55
65=100
- Then you press “Command-C” (on the PC it would be “Control-C”) and change back to the Terminal.app window.
- There you simply press “Command-V” (on the PC it would be “Control-V”).
- Now you should see the python file inside your editor.
- Now press
ESC
, then type:wq
.
Step 3b - Change configuration values (optional)
- If you want you can change the temperatures and the corresponding percent values of the fan in the configuration file.
- You have there the temperature in °C and after the “=” the percent value of the fan. You can experiment with them.
Step 4 - Close terminal
- You can now close the Terminal.app, as you have done everything that is needed to be done on the shell.
Step 5 - Select [Beta] mode
-
Now all other things have to be done in a browser, so open one and type
http://<IP or name of your RPi>
(without the “<” and “>”!). -
On the piCorePlayer page choose [Main Page]:
-
At the bottom of the page choose [Beta]:
Step 6 - Download required extensions
-
Then choose [Extensions]:
-
On the following [Information] page wait until all the five green checkmarks display and then choose [Available]:
-
There you have to:
- Choose
rpi-vc.tcz
then press on [Load]. - Choose
i2c-tools.tcz
then press on [Load]. - Choose
python3.8-rpi-gpio.tcz
then press [Load]. - Choose
python3.8-smbus.tcz
then press [Load].
- Choose
-
If some of these extension are already installed, it is OK, you don’t have to load them again.
Step 7 - Add User Commands
-
Then you have to choose [Tweaks] at the top:
-
On that page input the following “User Commands” into the appropriate fields:
- User Command #1:
modprobe i2c-dev
- User Command #2:
python3 /home/tc/argononed.py
- User Command #1:
-
And now press [Save] (at this place the argononed.py script and the argononed.conf file are also saved to the boot device):
Step 8 - Reboot
-
Now [Reboot] via the [Main Page] and now everything should be working:
-
Short press (ca. 3 seconds) of the Power button: Shutdown
-
Double press of the Power button: Reboot
-
Long press of the Power button: Hard switching the RPi off
Step 9 - Completed
-
The fan should be working also, when the temperature reaches the values of the table in the python script/the configuration file if there is one.
-
If you later make changes to the script
argononed.py
or to theargononed.conf
file, you have to use the [Backup] button on the [Main Page] again, to save the changes to your boot device! -
If you make changes to the
argononed.conf
file, they will be loaded after 30 seconds and you will hear the changes in fan speed directly.
Here is one addition from @chill
If you want that every time the Shutdown or the Reboot is done via the power button the actual configuration of piCorePlayer is saved, you can change theses lines at the beginning of the argononed.py script:
def shutdown_check():
while True:
pulsetime = 1
GPIO.wait_for_edge(shutdown_pin, GPIO.RISING)
time.sleep(0.01)
while GPIO.input(shutdown_pin) == GPIO.HIGH:
time.sleep(0.01)
pulsetime += 1
if pulsetime >=2 and pulsetime <=3:
os.system("pcp rb")
elif pulsetime >=4 and pulsetime <=5:
os.system("pcp sd")
into:
def shutdown_check():
while True:
pulsetime = 1
GPIO.wait_for_edge(shutdown_pin, GPIO.RISING)
time.sleep(0.01)
while GPIO.input(shutdown_pin) == GPIO.HIGH:
time.sleep(0.01)
pulsetime += 1
if pulsetime >=2 and pulsetime <=3:
os.system("pcp br")
elif pulsetime >=4 and pulsetime <=5:
os.system("pcp bs")
More information
- Argon One Case
- Development thread
- Documentation thread
- Argon One Replacement Daemon (FYI: Not working on pCP)
- Argon One Case with IR receiver and LIRC