J'ai décidé d'utiliser Raspberry Pi et la caméra, le kit de démarrage Grove Pi + et le kintone chez Hackason, et j'ai étudié la configuration et les paramètres initiaux de Raspberry Pi. En conséquence, bien qu'il y ait eu des problèmes avec les paramètres d'utilisation d'OpenCV avec Python 3 et les paramètres Grove Pi +, j'ai pu définir le Raspberry Pi et la caméra, le kit de démarrage Grove Pi + et la bibliothèque Python pour accéder à kintone.
Le dernier Raspberry Pi 4 n'est pas inclus dans le support Grove Pi, donc cette fois j'utilise Raspberry Pi 3. Le Raspberry Pi 4 est cher en premier lieu, vous n'aurez donc pas besoin de beaucoup de spécifications pour cette application.
Vous pouvez tous les acheter sur Amazon et les essayer pour environ 20 408 yens.
Raspberry Pi3 Model B Board & Case Set 3ple Decker Compatible (Clear) -Physical Computing Lab (6100 yens) https://www.amazon.co.jp/dp/B01CSFZ4JG/ SanDisk microSDHC ULTRA 16 Go 80 Mo / s SDSQUNS-016G Classe 10 (465 yens) https://www.amazon.co.jp/dp/B074B4P7KD/ __Grove Pi + Starter Kit Raspberry Pi A +, B, B + & 2,3 pour les débutants Certification CE __ (6100 yens) https://www.amazon.co.jp/dp/B07H9PFWHW/ __Câble d'interrupteur marche / arrêt de l'adaptateur secteur américain 5V 2.5A compatible avec la tarte aux framboises 3 Léger et pratique à transporter __ (464 yens) https://www.amazon.co.jp/dp/B07CYNGG4C/ __ Module caméra Puce photosensible OV5647 Capteur 5M pixel Raspberry Pi 1 2 3 Modèle B B A + compatible __ (780 yens) https://www.amazon.co.jp/dp/B07G572B3R/
J'ai téléchargé le dernier système d'exploitation à partir de ce qui suit. https://www.raspberrypi.org/downloads/raspbian/
L'image du système d'exploitation utilisée est la suivante. Raspbian Buster with desktop ・ Version: septembre 2019 ・ Date de sortie: 2019-09-26 -Version du noyau: 4.19
La méthode de configuration du système d'exploitation sur la carte SD est omise. Si vous souhaitez en savoir plus, veuillez vous référer à ce qui suit.
__Raspberry Pi Configuration initiale Windows (@ sigma7641) __ https://qiita.com/sigma7641/items/995c7bb07eab408b9d0e __Raspberry Pi Configuration initiale Mac (@skkojiko) __ https://qiita.com/skkojiko/items/a7e342a8ab53b409fe6a
Le travail se fait sur la ligne de commande, en se connectant avec ssh. L'éditeur de texte de ligne de commande est expliqué dans nano, mais voyez ci-dessous comment l'utiliser.
__GNU nano maîtrise (@snct_hu) __ https://qiita.com/snct_hu/items/971d512c26dd8b3a3b3c
Tout d'abord, définissez une adresse IP fixe pour faciliter la connexion avec ssh.
$ sudo nano /etc/dhcpcd.conf
(Changez l'adresse IP en un contenu approprié et ajoutez les paramètres suivants)
interface eth0
static ip_address=192.168.0.111/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8
Reportez-vous à ce qui suit pour les paramètres LAN sans fil. __ Définissez les paramètres LAN sans fil pour Raspberry Pi sur la ligne de commande (@mym) __ https://qiita.com/mym/items/468d2cdb30d756b6df24
Les paramètres de base du système d'exploitation sont définis à l'aide de raspi-config.
$ sudo raspi-config
Cette fois, ce qui suit est défini.
1 Change User Password
4 Localisation Options -> I1 Change Locale -> ja_JP.UTF-8 UTF-8 -> I2 Change Timezone -> Asia -> Tokyo -> I3 Modifier la disposition du clavier-> Approprié -> I4 Change Wi-fi Country -> JP Japan
5 Interfacing Options -> P1 Camera -> Enable -> P4 SPI -> Enable -> P5 I2C -> Enable
8 Update
Après la configuration, METTEZ À JOUR le système d'exploitation dans son état le plus récent.
$ sudo apt-get update
$ sudo apt-get upgrade
Voir ci-dessous pour les paramètres de la caméra Raspberry Pi.
__Raspberry Pi Prenez des photos et des vidéos avec un appareil photo __ https://iotdiyclub.net/raspberry-pi-using-camera-1/
Après avoir terminé les paramètres de base, configurez les paramètres pour OpenCV de Python (bibliothèque d'édition d'image).
$ sudo modprobe bcm2835-v4l2
$ sudo nano /etc/modules
bcm2835-v4l2
$ sudo apt-get install libopencv-dev python-opencv
Voir ci-dessous pour plus d'informations sur OpenCV.
OpenCV https://opencv.org/ __ Version Python des bases d'OpenCV __ https://cvtech.cc/py-opencv/ __ Cours d'introduction au traitement d'image: Traitement d'image à partir d'OpenCV et Python __ https://postd.cc/image-processing-101/
Lorsque vous utilisez Python3, définissez les paramètres suivants.
$ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103
$ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install libjasper-dev
$ pip3 install opencv-python
Si vous utilisez OpenCV tel qu'il est dans Python3, une erreur se produira dans l'importation cv2. Pour éviter cette erreur, ajoutez la bibliothèque à charger.
$ nano .bashrc
export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1
$ source .bashrc
Veuillez vous référer à ce qui suit pour installer Grove Pi + sur Raspberry Pi. GrovePi+ https://www.switch-science.com/catalog/2129/
Reportez-vous à ce qui suit pour configurer le logiciel Grove Pi +. Setting Up The Software https://www.dexterindustries.com/GrovePi/get-started-with-the-grovepi/setting-software/
$ curl -kL dexterindustries.com/update_grovepi | bash
$ sudo reboot
$ cd /home/pi/Dexter
$ git clone https://github.com/DexterInd/GrovePi
$ cd /home/pi/Dexter/GrovePi/Script
$ sudo chmod +x install.sh
$ sudo ./install.sh
S'il n'y a pas de problème après l'installation, vous pouvez vérifier le port I2C 04 comme indiqué ci-dessous avec la commande i2c detect.
$ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Après avoir configuré Grove Pi +, apt-get upgrade, qui met à jour le système d'exploitation et les logiciels installés, pose un problème avec la dépendance du package et provoque une erreur. Pour éviter cette erreur, procédez comme suit:
$ sudo apt-get --fix-broken upgrade
Pour tester si cela fonctionne réellement, connectez la LED Grove incluse au port D4 du Grove Pi + comme indiqué ci-dessous. http://wiki.seeedstudio.com/Grove-Red_LED/#play-with-raspberry-pi-with-grovepi_plus
Après le câblage, testez l'affichage de la version suivante et le clignotement du voyant pour voir s'il y a des problèmes.
$ python /home/pi/Dexter/GrovePi/Software/Python/grovepi.py
library supports this fw versions: 1.3.0
$ python /home/pi/Dexter/GrovePi/Software/Python/grove_led_blink.py
This example will blink a Grove LED connected to the GrovePi+ on the port labeled D4.
If you're having trouble seeing the LED blink, be sure to check the LED connection and the port number.
You may also try reversing the direction of the LED on the sensor.
Connect the LED to the port labele D4!
LED ON!
LED OFF!
LED ON!
LED OFF!
LED ON!
LED OFF!
Depuis le 02/02/2020, il y a un problème avec le fichier de la bibliothèque Grove Pi + 1.3.0 suivant, et de nombreux exemples ne fonctionnent pas. /home/pi/Dexter/GrovePi/Software/Python/grovepi.py https://github.com/DexterInd/GrovePi/blob/master/Software/Python/grovepi.py
Par exemple, grove_button.py est un programme qui affiche le bouton OFF avec 0 et le bouton ON avec 1, mais lorsqu'il est exécuté, l'affichage sera comme suit.
$ python /home/pi/Dexter/GrovePi/Software/Python/grove_button.py
255
255
255
255
255
255
Il y a un problème avec la partie lecture I2C de __grovepi.py et il doit être corrigé. __ Les parties modifiées de grovepi.py sont expliquées ci-dessous.
Ligne 227 read_identified_i2c_block () Supprimée car l'instruction while boucle indéfiniment
grovepi.py
def read_identified_i2c_block(read_command_id, no_bytes):
data = [-1]
data = read_i2c_block(no_bytes + 1)
return data
Ligne 246 Correction du numéro d'élément du tableau numérique de analogRead ()
grovepi.py
# Read analog value from Pin
def analogRead(pin):
write_i2c_block(aRead_cmd + [pin, unused, unused])
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
return number[1] * 256 + number[2]
Ligne 284 ultrasonicRead () number Numéro d'élément de matrice corrigé
grovepi.py
# Read value from Grove Ultrasonic
def ultrasonicRead(pin):
write_i2c_block(uRead_cmd + [pin, unused, unused])
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
return (number[1] * 256 + number[2])
Ligne 320 Numéro d'élément du tableau numérique corrigé et valeur de la variable no_bytes de dht ()
grovepi.py
# Read and return temperature and humidity from Grove DHT Pro
def dht(pin, module_type):
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 9)
if p_version==2:
h=''
for element in (number[1:5]):
h+=chr(element)
t_val=struct.unpack('f', h)
t = round(t_val[0], 2)
h = ''
for element in (number[5:9]):
h+=chr(element)
hum_val=struct.unpack('f',h)
hum = round(hum_val[0], 2)
else:
t_val=bytearray(number[1:5])
h_val=bytearray(number[5:9])
t=round(struct.unpack('f',t_val)[0],2)
hum=round(struct.unpack('f',h_val)[0],2)
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
return [t, hum]
else:
return [float('nan'),float('nan')]
Après le correctif ci-dessus, j'ai fait ce qui suit et j'ai obtenu les résultats escomptés.
$ python /home/pi/Dexter/GrovePi/Software/Python/grove_button.py
0
0
1
1
1
0
0
$ pip install pykintone
$ pip3 install pykintone
Définissez node-red comme suit.
$ sudo apt-get install nodered
$ npm install node-red-grovepi-nodes
$ npm install node-red-contrib-kintone
$ sudo systemctl enable nodered.service
$ sudo service nodered start
Vous pouvez utiliser node-red en accédant à l'adresse IP http: // Raspberry Pi: 1880 / avec un navigateur. Voir ci-dessous pour plus de détails. __Node-RED Run sur Raspberry Pi __ https://nodered.jp/docs/getting-started/raspberrypi
Configurez le bureau distant comme suit.
$ sudo apt-get install xrdp
$ cd /etc/xrdp/
$ sudo wget http://w.vmeta.jp/temp/km-0411.ini
$ sudo ln -s km-0411.ini km-e0010411.ini
$ sudo ln -s km-0411.ini km-e0200411.ini
$ sudo ln -s km-0411.ini km-e0210411.ini
$ sudo service xrdp restart
Vous pouvez vous connecter au bureau distant avec l'adresse IP du Raspberry Pi comme suit. Voir ci-dessous pour plus de détails. __ Connectez-vous à raspberry pi3 à partir d'un ordinateur Windows avec un bureau distant (@ t114) __ https://qiita.com/t114/items/bfac508504b9a6b7570d
J'ai eu une erreur quand j'ai mis opencv dans python3 avec Raspeye [Remedy](@ XM03) https://qiita.com/XM03/items/48463fd910470b226f22
Raspberry Pi Projects for the GrovePi. https://www.dexterindustries.com/GrovePi/projects-for-the-raspberry-pi/ https://www.dexterindustries.com/GrovePi/get-started-with-the-grovepi/setting-software/
Grove - LED https://www.seeedstudio.com/Grove-Green-LED.html http://wiki.seeedstudio.com/Grove-Red_LED/#play-with-raspberry-pi-with-grovepi_plus
Grove --Bouton https://www.seeedstudio.com/Grove-Button.html http://wiki.seeedstudio.com/Grove-Button/#play-with-raspberry-piwith-grovepi_plus
Exécuter sur Node-RED Raspberry Pi https://nodered.jp/docs/getting-started/raspberrypi
Connectez-vous à Raspberry Pi3 à partir d'un ordinateur Windows avec un bureau distant (@ t114) https://qiita.com/t114/items/bfac508504b9a6b7570d
GitHub icoxfog417/pykintone https://github.com/icoxfog417/pykintone
Correction d'un bug dans __grovepi.py (après la ligne 227) __ Il y a une correction dans la partie description de (Corrections de bogues Y.K)
grovepi.py
(Omis)
# Read I2C block from the GrovePi
def read_i2c_block(no_bytes = max_recv_size):
data = data_not_available_cmd
counter = 0
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
try:
data = i2c.read_list(reg = None, len = no_bytes)
time.sleep(0.002 + additional_waiting)
if counter > 0:
counter = 0
except:
counter += 1
time.sleep(0.003)
return data
# (Y.K Bug fixes)
def read_identified_i2c_block(read_command_id, no_bytes):
data = [-1]
data = read_i2c_block(no_bytes + 1)
return data
# Arduino Digital Read
def digitalRead(pin):
write_i2c_block(dRead_cmd + [pin, unused, unused])
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
return data
# Arduino Digital Write
def digitalWrite(pin, value):
write_i2c_block(dWrite_cmd + [pin, value, unused])
read_i2c_block(no_bytes = 1)
return 1
# Read analog value from Pin (Y.K Bug fixes)
def analogRead(pin):
write_i2c_block(aRead_cmd + [pin, unused, unused])
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
return number[1] * 256 + number[2]
# Write PWM
def analogWrite(pin, value):
write_i2c_block(aWrite_cmd + [pin, value, unused])
read_i2c_block(no_bytes = 1)
return 1
# Setting Up Pin mode on Arduino
def pinMode(pin, mode):
if mode == "OUTPUT":
write_i2c_block(pMode_cmd + [pin, 1, unused])
elif mode == "INPUT":
write_i2c_block(pMode_cmd + [pin, 0, unused])
read_i2c_block(no_bytes = 1)
return 1
# Read temp in Celsius from Grove Temperature Sensor
def temp(pin, model = '1.0'):
# each of the sensor revisions use different thermistors, each with their own B value constant
if model == '1.2':
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
elif model == '1.1':
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
else:
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
a = analogRead(pin)
resistance = (float)(1023 - a) * 10000 / a
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
return t
# Read value from Grove Ultrasonic (Y.K Bug fixes)
def ultrasonicRead(pin):
write_i2c_block(uRead_cmd + [pin, unused, unused])
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
return (number[1] * 256 + number[2])
# Read the firmware version
def version():
write_i2c_block(version_cmd + [unused, unused, unused])
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
return "%s.%s.%s" % (number[0], number[1], number[2])
# Read Grove Accelerometer (+/- 1.5g) XYZ value
# Need to investigate why this reports what was read with the previous command
# Doesn't look to be implemented on the GrovePi
def acc_xyz():
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
if number[1] > 32:
number[1] = - (number[1] - 224)
if number[2] > 32:
number[2] = - (number[2] - 224)
if number[3] > 32:
number[3] = - (number[3] - 224)
return (number[0], number[1], number[2])
# Read from Grove RTC
# Doesn't look to be implemented on the GrovePi
def rtc_getTime():
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
number = read_i2c_block()
return number
# Read and return temperature and humidity from Grove DHT Pro (Y.K Bug fixes)
def dht(pin, module_type):
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 9)
if p_version==2:
h=''
for element in (number[1:5]):
h+=chr(element)
t_val=struct.unpack('f', h)
t = round(t_val[0], 2)
h = ''
for element in (number[5:9]):
h+=chr(element)
hum_val=struct.unpack('f',h)
hum = round(hum_val[0], 2)
else:
t_val=bytearray(number[1:5])
h_val=bytearray(number[5:9])
t=round(struct.unpack('f',t_val)[0],2)
hum=round(struct.unpack('f',h_val)[0],2)
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
return [t, hum]
else:
return [float('nan'),float('nan')]
(Omis)
Recommended Posts