Update: I researched a little more and specified my questions.
I am trying to connenct my RPi3 to the extension Board SleepyPi2.
I want to restart the RPi3 every night by force or definde on/off times and be able to change the script on the arduino from the RPi3.
I have to confess that I am not very familiar with serial connections and have only used the SleepyPi2 with the official install script and ArduinoIDE. I would love to get some input from you on how to do it and on what i have done so far.
The Prerequisited for using this Board are the following (I’ll call them original documentation) and I would like to know how to achieve them with resin:
- Disable Serial Port Login
I found this thread from mid '17 which suggest to do
systemctl mask serial-getty@ttyAMA0.service
The original documentation with a standard Raspbian Software tells me todo:
sudo systemctl stop serial-getty@ttyS0.service sudo systemctl disable serial-getty@ttyS0.service
because the mapping of the port has been changed with the newest raspbian release.
Which one is right if I use
in my Dockerfile? (My device is currently on Resin OS 2.12.5+rev2 (dev) and Supervisor Version 7.1.18)
And I guess that I have to run this in the host-os but is there a possibility to do this automatically so I dont have to do it for every device I build (~100 in the next months)
- Enable UART
I have activated the Setting Enable UART in my Fleet Configurations, which should be equivalent to
sudo nano /boot/config.txt and add the line: enable_uart=1
in the original documentation?
- Disable Boot Info
The original documentation tells me to
sudo nano /boot/cmdline.txt It will look something like: dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait Delete the “console=serail0,115200″ parts so that you are left with: dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait
What is the equivalent to this in Resin?
- Set up the Reset (DTR) Pin at GPIO 22
The original documentation uses a modified version of avrdude and links it to the /usr/bin/avrdude:
wget https://github.com/SpellFoundry/avrdude-rpi/archive/master.zip sudo unzip master.zip cd ./avrdude-rpi-master/ sudo cp autoreset /usr/bin sudo cp avrdude-autoreset /usr/bin sudo mv /usr/bin/avrdude /usr/bin/avrdude-original sudo ln -s /usr/bin/avrdude-autoreset /usr/bin/avrdude
Can I just do the same process inside my container or do I have to perform it on my hostOS?
Currently I have a copy of the repo added to my Container and perform the actions within the container with a setup-script:
echo 'Copying autoreset to /usr/bin' cp /sonah/src/sleepypi/install/autoreset /usr/bin echo 'Copying avrdude-autoreset to /usr/bin' cp /sonah/src/sleepypi/install/avrdude-autoreset /usr/bin echo 'rename avrdude as avrdude-original' mv /usr/bin/avrdude /usr/bin/avrdude-original echo 'link avrdude-autoreset to avrdude' ln -s /usr/bin/avrdude-autoreset /usr/bin/avrdude
- Addind the SleepyPi to the Arduino environment
The original documentation copies a boards.txt to
But but as I dont have a user in the docker container I don’t know where to copy these files to.
- Adding Libraries
The original documentations adds some needed Libraries to
The only suitable folder for this I found in my Docker Image was:
Is it possible to put the libraries I want to use here?
- Using I2C to change a jumpers state
The RPi3 has to override the SleepyPi2’s functionality to controll the RPi3’s Power when it uploads new software. This can be done via Software using I2C (link):
The Power Bypass can alternatively be enabled in software via an 12c GPIO chip
After installing i2c tools, the Jumper Powerbypass can be switched by the commands
switch the Software Jumper ON type: i2cset -y 1 0x24 0xFD to switch the Software Jumper OFF (power on default) type: i2cset -y 1 0x24 0xFF
Do I only need to run
CMD modprobe i2c-dev && python ...
to make this work?
- Using I2C to access the RTC
The original documentation tells me to add
The resin equivalent should be a Fleet Configuration like:
[RESIN_HOST_CONFIG_dtoverlay] = i2c-rtc,pcf8523
In addition to that I have to out-comment some lines in
can I also do this just inside the container or do i have to do it on the host-os?
And If i have to do it on the host os, is there a way to automate it, if I want to do this on ~100 devices?
- Handshake for Shutdown
The following GPIOs are used for the handshake (link):
GPIO 24: – Command the RPi to shutdown
GPIO 25: – RPi is running
the original documentation tells me to call the following script from /etc/rc.local:
import RPi.GPIO as GPIO import os, time GPIO.setmode(GPIO.BCM) GPIO.setup(24, GPIO.IN) GPIO.setup(25, GPIO.OUT) GPIO.output(25, GPIO.HIGH) print ("[Info] Telling Sleepy Pi we are running pin 25") while True: if (GPIO.input(24)): print ("Sleepy Pi requesting shutdown on pin 24") os.system("sudo shutdown -h now") break time.sleep(0.5)
Will this work on resin as well or do i have to change something?
- Upload Code to Arduino
As I can’t use the Arduino IDE I was thinking of doing the upload of new code with
If i understoof this correctly, I can specify my board, used libraries and my actual script with this, is that right?