Difference between revisions of "Raspberry Pi Compute"
(45 intermediate revisions by the same user not shown) | |||
Line 219: | Line 219: | ||
https://itnext.io/raspberry-pi-read-only-kiosk-mode-the-complete-tutorial-for-2021-58a860474215 | https://itnext.io/raspberry-pi-read-only-kiosk-mode-the-complete-tutorial-for-2021-58a860474215 | ||
https://desertbot.io/blog/raspberry-pi-4-touchscreen-kiosk-setup-64-bit-bullseye | |||
<pre> | <pre> | ||
sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox | sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox | ||
Line 261: | Line 261: | ||
</pre> | </pre> | ||
=== Extensions for Kiosks === | |||
https://chrome.google.com/webstore/detail/virtual-keyboard/pflmllfnnabikmfkkaddkoolinlfninn | |||
https://chrome.google.com/webstore/detail/kiosk-extension/hbpkaaahpgfafhefiacnndahmanhjagi | |||
==Setup Docker== | ==Setup Docker== | ||
Line 268: | Line 273: | ||
https://withblue.ink/2020/06/24/docker-and-docker-compose-on-raspberry-pi-os.html | https://withblue.ink/2020/06/24/docker-and-docker-compose-on-raspberry-pi-os.html | ||
https://www.tutorialworks.com/container-networking/ | |||
https://www.losant.com/blog/how-to-access-serial-devices-in-docker | |||
https://nodered.org/docs/getting-started/docker | |||
https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Dockerfile-vs-docker-compose-Whats-the-difference | |||
important ... https://github.com/raspberrypi/linux/issues/4092 | |||
=== Portainer === | |||
Pertained is used to manage Docker container running on a system. | |||
docker run - | [[File:Portainer1.png|frameless|974x974px]] | ||
docker volume create portainer_data | |||
docker run -d -p 9000:9000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest | |||
MQTT | === MQTT === | ||
docker network create mqtt | |||
docker run -it -p 11883:1883 --name=mqtt -v /home/pi/mqtt:/mosquitto/config -v /home/pi/mqtt/mqtt1.conf:/mosquitto/config/mosquitto.conf -v /home/pi/mqtt/aclfile.acl:/mosquitto/config/aclfile.acl -v /home/pi/mqtt/pwfile:/mosquitto/config/passwordfile eclipse-mosquitto:openssl | docker run -it -p 11883:1883 --name=mqtt --net mqtt -v /home/pi/mqtt:/mosquitto/config -v /home/pi/mqtt/mqtt1.conf:/mosquitto/config/mosquitto.conf -v /home/pi/mqtt/aclfile.acl:/mosquitto/config/aclfile.acl -v /home/pi/mqtt/pwfile:/mosquitto/config/passwordfile eclipse-mosquitto:openssl | ||
=== Node-RED === | |||
docker run -it -p 5001:1880 --net mqtt --restart=always -v node_red_data_1:/data --name mynodered1 nodered/node-red --privileged | |||
--device /dev/ttyUSB0:/dev/ttyUSB0 --device /dev/ttyUSB1:/dev/ttyUSB1 --device /dev/ttyUSB2:/dev/ttyUSB2 --device /dev/ttyUSB3:/dev/ttyUSB3 --device /dev/ttyUSB4:/dev/ttyUSB4 --device /dev/ttyUSB5:/dev/ttyUSB5 | |||
docker run -it -p 5002:1880 -p 6002:6000 -p 7002:7000 --net mqtt --restart=always -v node_red_data_2:/data --name mynodered2 nodered/node-red | |||
Docker Compose: | Docker Compose: | ||
https://gist.github.com/troyfontaine/3790a40bbe5bec2cf112568f5cfefd15 | https://gist.github.com/troyfontaine/3790a40bbe5bec2cf112568f5cfefd15 | ||
=== Mediawiki === | |||
In Portainer create and deploy a Stack called ''wiki'', pasting the following into the editor. | |||
See https://github.com/heatweb/plumbing-controller/blob/main/docker/docker-compose-wiki.yaml | |||
<pre> | |||
# MediaWiki with MySQL | |||
# Access via "http://localhost:8080" | |||
# (or "http://$(docker-machine ip):8080" if using docker-machine) | |||
version: '3' | |||
services: | |||
mediawiki: | |||
image: arm64v8/mediawiki | |||
restart: always | |||
networks: | |||
- wiki-net | |||
ports: | |||
- 8080:80 | |||
volumes: | |||
- /var/www/html/ | |||
# After initial setup, download LocalSettings.php to the same directory as | |||
# this yaml and uncomment the following line and use compose to restart | |||
# the mediawiki service | |||
# - ./LocalSettings.php:/var/www/html/LocalSettings.php | |||
database: | |||
image: arm64v8/mysql:latest | |||
restart: always | |||
networks: | |||
- wiki-net | |||
environment: | |||
MYSQL_DATABASE: wiki_db | |||
MYSQL_ROOT_PASSWORD: root | |||
MYSQL_USER: wikimedia | |||
MYSQL_PASSWORD: wikimedia | |||
volumes: | |||
- /var/lib/mysql | |||
networks: | |||
wiki-net: | |||
driver: bridge | |||
</pre> | |||
Note: You may need to add the running containers to the mqtt docker network in Portainer. | |||
=== MySQL === | |||
<pre> | |||
CREATE TABLE `readings` ( | |||
`network` varchar(32) NOT NULL, | |||
`node` varchar(32) NOT NULL, | |||
`device` varchar(32) NOT NULL, | |||
`vargroup` varchar(16) NOT NULL, | |||
`varkey` varchar(32) NOT NULL, | |||
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
`value` varchar(64) NOT NULL, | |||
`topic` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL | |||
) | |||
</pre> | |||
===Grafana=== | |||
Shell into Grafana and edit ini. At the bottom you can sett an anonymous login to allow access without a password. | |||
May need to install nano | |||
apk update | |||
apk add nano | |||
nano /usr/share/grafana/conf/defaults.ini | |||
<pre> | |||
#################################### Anonymous Auth ###################### | |||
[auth.anonymous] | |||
# enable anonymous access | |||
enabled = true | |||
# specify organization name that should be used for unauthenticated users | |||
org_name = Heatweb | |||
# specify role for unauthenticated users | |||
org_role = Viewer | |||
# mask the Grafana version number for unauthenticated users | |||
hide_version = true | |||
</pre> | |||
=== Nginx Reverse Proxy === | |||
https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Docker-Nginx-reverse-proxy-setup-example | |||
https://ryan.himmelwright.net/post/nginx-subdomain-reverse-proxy/ | |||
sudo docker run -d --name nginx-base --net mqtt --add-host=host.docker.internal:host-gateway -p 80:80 nginx | |||
mkdir ~/nginx/ | |||
sudo docker cp nginx-base:/etc/nginx/conf.d/default.conf ~/nginx/default.conf | |||
sudo nano ~/nginx/default.conf | |||
<pre> | |||
server { | |||
listen 80; | |||
listen [::]:80; | |||
server_name localhost; | |||
location / { | |||
root /usr/share/nginx/html; | |||
index index.html index.htm; | |||
} | |||
location /ui { | |||
proxy_pass http://host.docker.internal:1880/ui; | |||
} | |||
error_page 500 502 503 504 /50x.html; | |||
location = /50x.html { | |||
root /usr/share/nginx/html; | |||
} | |||
} | |||
</pre> | |||
sudo docker cp ~/nginx/default.conf nginx-base:/etc/nginx/conf.d/ | |||
sudo docker exec nginx-base nginx -t | |||
sudo docker exec nginx-base nginx -s reload | |||
==Apache2 Reverse Proxy== | |||
mkdir ~/www | |||
sudo nano ~/www/index.html | |||
sudo docker run -dit --name apache -p 80:80 -v ~/www:/usr/local/apache2/htdocs/ httpd:2.4 | |||
== Modem Management == | |||
https://www.jeffgeerling.com/blog/2022/using-4g-lte-wireless-modems-on-raspberry-pi | |||
https://re-rockspace-local.com/how-to-use-modem-manager-raspberry-pi/ | |||
== LCD Screen == | |||
https://www.instructables.com/Raspberry-Pi-Touchscreen-Setup/ | |||
https://www.waveshare.com/wiki/CM4-IO-BASE-A#CSI_DSI | |||
To get touchscreen working on the CM4 64 bit, requires. | |||
sudo apt update | |||
sudo apt dist-upgrade | |||
sudo nano /boot/config.txt | |||
<pre> | |||
# Enable DRM VC4 V3D driver | |||
#dtoverlay=vc4-kms-v3d | |||
#max_framebuffers=2 | |||
</pre> | |||
<pre> | |||
wget https://www.waveshare.com/w/upload/7/75/CM4_dt_blob_Source.zip | |||
unzip -o CM4_dt_blob_Source.zip -d ./CM4_dt_blob_Source | |||
sudo chmod 777 -R CM4_dt_blob_Source | |||
cd CM4_dt_blob_Source/ | |||
sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp0-double_cam.dts | |||
</pre> |
Latest revision as of 00:23, 24 December 2022
https://www.waveshare.com/wiki/Write_Image_for_Compute_Module_Boards_eMMC_version
https://www.waveshare.com/wiki/CM4-DUAL-ETH-4G/5G-BASE
https://github.com/SequentMicrosystems/ti-rpi/blob/main/README.md
Windows Setup
https://www.raspberrypi.com/documentation/computers/compute-module.html
https://jamesachambers.com/full-compute-module-4-raspberry-pi-setup-imaging-guide/
Windows Installer
For those who just want to enable the Compute Module eMMC as a mass storage device under Windows, the stand-alone installer is the recommended option. This installer has been tested on Windows 10 32-bit and 64-bit, and Windows XP 32-bit.
Please ensure you are not writing to any USB devices whilst the installer is running.
- Download and run the https://github.com/raspberrypi/usbboot/raw/master/win32/rpiboot_setup.exe to install the drivers and boot tool.
- Plug your host PC USB into the USB SLAVE port, making sure you have setup the board as described above.
- Apply power to the board; Windows should now find the hardware and install the driver.
- Once the driver installation is complete, run the
RPiBoot.exe
tool that was previously installed. - After a few seconds, the Compute Module eMMC will pop up under Windows as a disk (USB mass storage device).
Setup
Install image to Compute using imager software. The 64 Bit Lite version should be used.
https://www.raspberrypi.com/software/
The following commands can be executed manually, or can be saved into an 'sh' file (e.g. setup.sh) and then run using bash setup.sh
sudo apt-get update sudo apt-get upgrade bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered) sudo systemctl enable nodered.service
sudo apt-get -y install mosquitto sudo apt-get -y install pwgen sudo apt-get -y install wget sudo apt-get -y install zip
sudo apt-get -y install build-essential cmake echo "Installing M-Bus Libraries..." sudo apt-get -y install git libtool libltdl-dev autoconf automake sudo git clone https://github.com/rscada/libmbus.git cd libmbus sudo sh clean.sh sudo sh build.sh make sudo make install sudo ln -s /usr/local/lib/libmbus.so.0 /usr/lib/libmbus.so.0
mkdir /home/pi/node-hiu mkdir /home/pi/node-hiu/logs mkdir /home/pi/node-hiu/iHIU mkdir /home/pi/node-hiu/flows sudo chmod -R 775 /home/pi/node-hiu sudo mkdir /boot/heatweb
cd ~ git clone https://github.com/SequentMicrosystems/ti-rpi.git cd ti-rpi/ sudo make install
cd ~ git clone https://github.com/SequentMicrosystems/megabas-rpi.git cd /home/pi/megabas-rpi sudo make install
The following nodes should be installed via the Node-RED Palette Manager. Items in bold may need manually installing.
node-red node-red-contrib-arp node-red-contrib-crypt node-red-contrib-drawsvg node-red-contrib-heatweb node-red-contrib-m-bus node-red-contrib-play-audio node-red-contrib-ui-level node-red-contrib-ui-svg node-red-dashboard node-red-node-daemon node-red-node-email node-red-node-pi-gpio node-red-node-ping node-red-node-random node-red-node-serialport node-red-node-smooth node-red-node-ui-table node-red-contrib-pid
cd /home/pi/.node-red node-red-stop sudo npm install --unsafe-perm --build-from-source node-red-dashboard sudo npm install --unsafe-perm --build-from-source node-red-contrib-arp sudo npm install --unsafe-perm --build-from-source node-red-contrib-crypt sudo npm install --unsafe-perm --build-from-source node-red-contrib-drawsvg sudo npm install --unsafe-perm --build-from-source node-red-contrib-heatweb sudo npm install --unsafe-perm --build-from-source node-red-contrib-m-bus sudo npm install --unsafe-perm --build-from-source node-red-contrib-ui-level sudo npm install --unsafe-perm --build-from-source node-red-contrib-ui-svg sudo npm install --unsafe-perm --build-from-source node-red-node-daemon sudo npm install --unsafe-perm --build-from-source node-red-node-email sudo npm install --unsafe-perm --build-from-source node-red-node-ui-table sudo npm install --unsafe-perm --build-from-source node-red-contrib-pid sudo npm install --unsafe-perm --build-from-source node-red-contrib-ip node-red-restart
boot.config
# For more options and information see # http://rpf.io/configtxt # Some settings may impact device functionality. See link above for details # uncomment if you get no picture on HDMI for a default "safe" mode #hdmi_safe=1 # uncomment the following to adjust overscan. Use positive numbers if console # goes off screen, and negative if there is too much border #overscan_left=16 #overscan_right=16 #overscan_top=16 #overscan_bottom=16 # uncomment to force a console size. By default it will be display's size minus # overscan. #framebuffer_width=1280 #framebuffer_height=720 # uncomment if hdmi display is not detected and composite is being output hdmi_force_hotplug=1 # uncomment to force a specific HDMI mode (this will force VGA) hdmi_group=1 #hdmi_mode=82 #hdmi_mode=16 # uncomment to force a HDMI mode rather than DVI. This can make audio work in # DMT (computer monitor) modes #hdmi_drive=2 # uncomment to increase signal to HDMI, if you have interference, blanking, or # no display #config_hdmi_boost=4 # uncomment for composite PAL #sdtv_mode=2 #uncomment to overclock the arm. 700 MHz is the default. #arm_freq=800 # Uncomment some or all of these to enable the optional hardware interfaces dtparam=i2c_arm=on #dtparam=i2s=on #dtparam=spi=on # Uncomment this to enable infrared communication. #dtoverlay=gpio-ir,gpio_pin=17 #dtoverlay=gpio-ir-tx,gpio_pin=18 # Additional overlays and parameters are documented /boot/overlays/README # Enable audio (loads snd_bcm2835) dtparam=audio=on # Automatically load overlays for detected cameras camera_auto_detect=1 # Automatically load overlays for detected DSI displays display_auto_detect=1 # Enable DRM VC4 V3D driver dtoverlay=vc4-kms-v3d max_framebuffers=2 # Run in 64-bit mode arm_64bit=1 # Disable compensation for displays with overscan disable_overscan=1 [cm4] # Enable host mode on the 2711 built-in XHCI USB controller. # This line should be removed if the legacy DWC2 controller is required # (e.g. for USB device mode) or if USB support is not required. #otg_mode=1 dtoverlay=dwc2,dr_mode=host [all] [pi4] # Run as fast as firmware / board allows arm_boost=1 [all] enable_uart=1 dtoverlay=pi3-miniuart-bt dtoverlay=uart5 dtoverlay=uart4 dtoverlay=uart3 dtoverlay=uart2
https://pimylifeup.com/raspberry-pi-screen-resolution/
Setup Kiosk
https://itnext.io/raspberry-pi-read-only-kiosk-mode-the-complete-tutorial-for-2021-58a860474215
https://desertbot.io/blog/raspberry-pi-4-touchscreen-kiosk-setup-64-bit-bullseye
sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox sudo apt-get install --no-install-recommends chromium-browser
sudo nano /etc/xdg/openbox/autostart
Should contain...
# These things are run when an Openbox X Session is started. # You may place a similar script in $HOME/.config/openbox/autostart # to run user-specific things. # # Disable any form of screen saver / screen blanking / power management xset s off xset s noblank xset -dpms # Allow quitting the X server with CTRL-ATL-Backspace setxkbmap -option terminate:ctrl_alt_bksp # Start Chromium in kiosk mode sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State' sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences chromium-browser --block-new-web-contents --start-fullscreen --kiosk --incognito --noerrdialogs --disable-translate --no-first-run --fast --fast-start --disable-infobars --disable-features=TranslateUI --disk-cache-dir=/dev/null --password-store=basic --disable-pinch --overscroll-history-navigation=disabled --disable-features=TouchpadOverscrollHistoryNavigation 'http://localhost:1880/ui'
make everything start on boot using
cd ~ sudo nano .bash_profile
...insert this line...
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor
Extensions for Kiosks
https://chrome.google.com/webstore/detail/virtual-keyboard/pflmllfnnabikmfkkaddkoolinlfninn
https://chrome.google.com/webstore/detail/kiosk-extension/hbpkaaahpgfafhefiacnndahmanhjagi
Setup Docker
https://withblue.ink/2020/06/24/docker-and-docker-compose-on-raspberry-pi-os.html
https://www.tutorialworks.com/container-networking/
https://www.losant.com/blog/how-to-access-serial-devices-in-docker
https://nodered.org/docs/getting-started/docker
important ... https://github.com/raspberrypi/linux/issues/4092
Portainer
Pertained is used to manage Docker container running on a system.
docker volume create portainer_data docker run -d -p 9000:9000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
MQTT
docker network create mqtt
docker run -it -p 11883:1883 --name=mqtt --net mqtt -v /home/pi/mqtt:/mosquitto/config -v /home/pi/mqtt/mqtt1.conf:/mosquitto/config/mosquitto.conf -v /home/pi/mqtt/aclfile.acl:/mosquitto/config/aclfile.acl -v /home/pi/mqtt/pwfile:/mosquitto/config/passwordfile eclipse-mosquitto:openssl
Node-RED
docker run -it -p 5001:1880 --net mqtt --restart=always -v node_red_data_1:/data --name mynodered1 nodered/node-red --privileged
--device /dev/ttyUSB0:/dev/ttyUSB0 --device /dev/ttyUSB1:/dev/ttyUSB1 --device /dev/ttyUSB2:/dev/ttyUSB2 --device /dev/ttyUSB3:/dev/ttyUSB3 --device /dev/ttyUSB4:/dev/ttyUSB4 --device /dev/ttyUSB5:/dev/ttyUSB5
docker run -it -p 5002:1880 -p 6002:6000 -p 7002:7000 --net mqtt --restart=always -v node_red_data_2:/data --name mynodered2 nodered/node-red
Docker Compose:
https://gist.github.com/troyfontaine/3790a40bbe5bec2cf112568f5cfefd15
Mediawiki
In Portainer create and deploy a Stack called wiki, pasting the following into the editor.
See https://github.com/heatweb/plumbing-controller/blob/main/docker/docker-compose-wiki.yaml
# MediaWiki with MySQL # Access via "http://localhost:8080" # (or "http://$(docker-machine ip):8080" if using docker-machine) version: '3' services: mediawiki: image: arm64v8/mediawiki restart: always networks: - wiki-net ports: - 8080:80 volumes: - /var/www/html/ # After initial setup, download LocalSettings.php to the same directory as # this yaml and uncomment the following line and use compose to restart # the mediawiki service # - ./LocalSettings.php:/var/www/html/LocalSettings.php database: image: arm64v8/mysql:latest restart: always networks: - wiki-net environment: MYSQL_DATABASE: wiki_db MYSQL_ROOT_PASSWORD: root MYSQL_USER: wikimedia MYSQL_PASSWORD: wikimedia volumes: - /var/lib/mysql networks: wiki-net: driver: bridge
Note: You may need to add the running containers to the mqtt docker network in Portainer.
MySQL
CREATE TABLE `readings` ( `network` varchar(32) NOT NULL, `node` varchar(32) NOT NULL, `device` varchar(32) NOT NULL, `vargroup` varchar(16) NOT NULL, `varkey` varchar(32) NOT NULL, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `value` varchar(64) NOT NULL, `topic` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL )
Grafana
Shell into Grafana and edit ini. At the bottom you can sett an anonymous login to allow access without a password. May need to install nano
apk update apk add nano
nano /usr/share/grafana/conf/defaults.ini
#################################### Anonymous Auth ###################### [auth.anonymous] # enable anonymous access enabled = true # specify organization name that should be used for unauthenticated users org_name = Heatweb # specify role for unauthenticated users org_role = Viewer # mask the Grafana version number for unauthenticated users hide_version = true
Nginx Reverse Proxy
https://ryan.himmelwright.net/post/nginx-subdomain-reverse-proxy/
sudo docker run -d --name nginx-base --net mqtt --add-host=host.docker.internal:host-gateway -p 80:80 nginx mkdir ~/nginx/ sudo docker cp nginx-base:/etc/nginx/conf.d/default.conf ~/nginx/default.conf sudo nano ~/nginx/default.conf
server { listen 80; listen [::]:80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } location /ui { proxy_pass http://host.docker.internal:1880/ui; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
sudo docker cp ~/nginx/default.conf nginx-base:/etc/nginx/conf.d/ sudo docker exec nginx-base nginx -t sudo docker exec nginx-base nginx -s reload
Apache2 Reverse Proxy
mkdir ~/www sudo nano ~/www/index.html
sudo docker run -dit --name apache -p 80:80 -v ~/www:/usr/local/apache2/htdocs/ httpd:2.4
Modem Management
https://www.jeffgeerling.com/blog/2022/using-4g-lte-wireless-modems-on-raspberry-pi
https://re-rockspace-local.com/how-to-use-modem-manager-raspberry-pi/
LCD Screen
https://www.instructables.com/Raspberry-Pi-Touchscreen-Setup/
https://www.waveshare.com/wiki/CM4-IO-BASE-A#CSI_DSI
To get touchscreen working on the CM4 64 bit, requires.
sudo apt update sudo apt dist-upgrade sudo nano /boot/config.txt
# Enable DRM VC4 V3D driver #dtoverlay=vc4-kms-v3d #max_framebuffers=2
wget https://www.waveshare.com/w/upload/7/75/CM4_dt_blob_Source.zip unzip -o CM4_dt_blob_Source.zip -d ./CM4_dt_blob_Source sudo chmod 777 -R CM4_dt_blob_Source cd CM4_dt_blob_Source/ sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp0-double_cam.dts