Dans cet article je vais brièvement vous montrer comment configurer une camera thermique ARG8833 avec un Rasberry Pi 4 et un display PiTFT 3.5″ resistive touch (320×480)
Cet article n’est pas terminé mais sert comme aide-mémoire
Préparation de votre Rasberry
Pour l’installation de votre Raspberry, vous pouvez vous aider de cet article.
Privilégier, la dernière version de Rasbian, évidemment.
Il vous faudra encore faire les mises à jour et installer git (et vim et ntpdate, si ce n’est pas fait)
sudo apt-get update sudo apt-get upgrade sudo apt-get install vim ntpdate sudo apt-get install git
Installation de l’écran
Référence: https://learn.adafruit.com/adafruit-pitft-3-dot-5-touch-screen-for-raspberry-pi?view=all
cd ~ sudo apt-get install -y git python3-pip sudo pip3 install --upgrade adafruit-python-shell click git clone https://github.com/adafruit/Raspberry-Pi-Installer-Scripts.git cd Raspberry-Pi-Installer-Scripts sudo python3 adafruit-pitft.py --display=35r --rotation=90 --install-type=fbcp
Redémarrer votre Raspberry et votre écran fonctionnera
La partie ci-dessous est obsolète. Je la garde pour mémoire
Select configuration: 1. PiTFT 2.4", 2.8" or 3.2" resistive (240x320) 2. PiTFT 2.2" no touch (240x320) 3. PiTFT 2.8" capacitive touch (240x320) 4. PiTFT 3.5" resistive touch (320x480) 5. Quit without installing SELECT 1-5: 4 Select rotation: 1. 90 degrees (landscape) 2. 180 degrees (portait) 3. 270 degrees (landscape) 4. 0 degrees (portait) SELECT 1-4: 1 [PITFT] Checking init system... Found systemd /boot is mounted [PITFT] System update Updating apt indexes... ......... Reading package lists... ......... [PITFT] Installing Python libraries & Software... Installing Pre-requisite Software...This may take a few minutes! [PITFT] Updating /boot/config.txt... [PITFT] Updating SysFS rules for Touchscreen... [PITFT] Updating TSLib default calibration... Would you like the console to appear on the PiTFT display? [y/n] n [PITFT] Making sure console doesn't use PiTFT Removing console fbcon map from /boot/cmdline.txt Screen blanking time reset to 10 minutes Would you like the HDMI display to mirror to the PiTFT display? [y/n] y [PITFT] Adding FBCP support... Installing cmake... W: --force-yes is deprecated, use one of the options starting with --allow instead. Downloading rpi-fbcp... Uncompressing rpi-fbcp... Building rpi-fbcp... Installing rpi-fbcp... Remove fbcp from /etc/rc.local, if it's there... We have systemd, so install fbcp systemd unit... Created symlink /etc/systemd/system/multi-user.target.wants/fbcp.service → /etc/systemd/system/fbcp.service. Setting raspi-config to boot to desktop w/o login... Created symlink /etc/systemd/system/default.target → /lib/systemd/system/graphical.target. Configuring boot/config.txt for forced HDMI Using x1.5 resolution [PITFT] Updating X11 default calibration... [PITFT] Success! Settings take effect on next boot. REBOOT NOW? [y/N] y
Installation de la camera thermique
https://learn.adafruit.com/adafruit-amg8833-8×8-thermal-camera-sensor/raspberry-pi-thermal-camera
Connections
Vin à la broche t3V ou 5V
GND à la broche GND
SDA à la broche o SDA
SCL à la broche SCL
Contrôler les connections:
sudo i2cdetect -y 1
Ce qui devrait afficher
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- 69 -- 69 -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Installation des softs
Documentation
https://learn.adafruit.com/adafruit-amg8833-8×8-thermal-camera-sensor/raspberry-pi-thermal-camera
sudo apt-get install libatlas-base-dev sudo pip3 install adafruit-circuitpython-amg88xx sudo apt-get install -y python3-scipy python3-pygame sudo pip3 install colour
Le script
Créer le script
sudo nano /home/pi/thermcam.py
Le script d’adafruit
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT """This example is for Raspberry Pi (Linux) only! It will not work on microcontrollers running CircuitPython!""" import os import math import time import numpy as np import pygame import busio import board from scipy.interpolate import griddata from colour import Color import adafruit_amg88xx i2c_bus = busio.I2C(board.SCL, board.SDA) # low range of the sensor (this will be blue on the screen) MINTEMP = 15.0 # high range of the sensor (this will be red on the screen) MAXTEMP = 28.0 # how many color values we can have COLORDEPTH = 1024 os.putenv("SDL_FBDEV", "/dev/fb1") # pylint: disable=no-member pygame.init() # pylint: enable=no-member # initialize the sensor sensor = adafruit_amg88xx.AMG88XX(i2c_bus) # pylint: disable=invalid-slice-index points = [(math.floor(ix / 8), (ix % 8)) for ix in range(0, 64)] grid_x, grid_y = np.mgrid[0:7:32j, 0:7:32j] # pylint: enable=invalid-slice-index # sensor is an 8x8 grid so lets do a square height = 400 width = 400 # the list of colors we can choose from blue = Color("indigo") colors = list(blue.range_to(Color("red"), COLORDEPTH)) # create the array of colors colors = [(int(c.red * 255), int(c.green * 255), int(c.blue * 255)) for c in colors] displayPixelWidth = width / 30 displayPixelHeight = height / 30 lcd = pygame.display.set_mode((width, height)) lcd.fill((255, 0, 0)) pygame.display.update() pygame.mouse.set_visible(False) lcd.fill((0, 0, 0)) pygame.display.update() # some utility functions def constrain(val, min_val, max_val): return min(max_val, max(min_val, val)) def map_value(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min # let the sensor initialize time.sleep(0.1) while True: # read the pixels pixels = [] for row in sensor.pixels: pixels = pixels + row pixels = [map_value(p, MINTEMP, MAXTEMP, 0, COLORDEPTH - 1) for p in pixels] # perform interpolation bicubic = griddata(points, pixels, (grid_x, grid_y), method="cubic") # draw everything for ix, row in enumerate(bicubic): for jx, pixel in enumerate(row): pygame.draw.rect( lcd, colors[constrain(int(pixel), 0, COLORDEPTH - 1)], ( displayPixelHeight * ix, displayPixelWidth * jx, displayPixelHeight, displayPixelWidth, ), ) pygame.display.update()
Rendre le script exécutable et redémarrer votre Pi
sudo chmod +x /home/pi/thermcam.py
Lancement du script au démarrage
Editez le fichier
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
et ajoutez
@lxpanel --profile LXDE-pi @pcmanfm --desktop --profile LXDE-pi @xscreensaver -no-splash @python3 /home/pi/thermcam.py &
Screenshot
Voici une solution simple pour faire des screenshots de l’image rendu par la caméra thermique
Installation de scrot
sudo apt install scrot
Création du script
sudo nano /home/pi/scrot.sh
et ajoutez les lignes
#!/bin/sh LOCATION="$(date +/path/to/home/Pictures/shots/%Y/%m/%d)" mkdir -p $LOCATION cd $LOCATION DISPLAY=:0 scrot '%Y-%m-%d-%H%M.jpg' -q 20
modification des permissions
chmod u+x /home/pi/scrot.sh
essayez
cd /home/pi/ ./scrot.sh
Prendre un screenshot toutes les 15mn
crontab -e
ajoutez la ligne
*/15 * * * 1-7 /home/pi/scrot.sh
Le fichier sera exécuté toutes les 15mn, du lundi au dimanche
Discussion
https://forums.adafruit.com/viewtopic.php?f=50&t=143684&p=709531&hilit=raspberry+numpy#p709531