Ich entschied mich für Raspberry Pi und Kamera, Grove Pi + Starter Kit und Kintone bei Hackason und untersuchte das Setup und die Grundeinstellungen von Raspberry Pi. Obwohl es Probleme mit den Einstellungen für die Verwendung von OpenCV mit Python 3 und den Grove Pi + -Einstellungen gab, konnte ich den Raspberry Pi und die Kamera, das Grove Pi + -Starter-Kit und die Python-Bibliothek so einstellen, dass sie auf Kintone zugreifen.
Der neueste Raspberry Pi 4 ist nicht in der Grove Pi-Unterstützung enthalten, daher verwende ich dieses Mal Raspberry Pi 3. Der Raspberry Pi 4 ist in erster Linie teuer, und Sie werden für diese Anwendung nicht so viele Spezifikationen benötigen.
Sie können sie alle bei Amazon kaufen und für etwa 20.408 Yen ausprobieren.
Raspberry Pi3 Modell B Board & Case Set 3ple Decker-kompatibel (klar) -Physical Computing Lab (6.100 Yen) https://www.amazon.co.jp/dp/B01CSFZ4JG/ SanDisk microSDHC ULTRA 16 GB 80 MB / s SDSQUNS-016G Class10 (465 Yen) https://www.amazon.co.jp/dp/B074B4P7KD/ __Grove Pi + Starter Kit Himbeer Pi A +, B, B + & 2,3 für CE-Zertifizierung für Anfänger __ (6.100 Yen) https://www.amazon.co.jp/dp/B07H9PFWHW/ __US Netzteil Ein / Aus-Schalterkabel 5V 2,5A kompatibel mit Himbeerkuchen 3 Leicht und bequem zu tragen __ (464 Yen) https://www.amazon.co.jp/dp/B07CYNGG4C/ __ Kameramodul Lichtempfindlicher Chip OV5647 Sensor 5M Pixel Himbeer Pi 1 2 3 Modell B B A + kompatibel __ (780 Yen) https://www.amazon.co.jp/dp/B07G572B3R/
Ich habe das neueste Betriebssystem von folgenden heruntergeladen. https://www.raspberrypi.org/downloads/raspbian/
Das verwendete Betriebssystem-Image lautet wie folgt. Raspbian Buster with desktop ・ Version: September 2019 ・ Erscheinungsdatum: 2019-09-26 -Kernel-Version: 4.19
Die Methode zum Einrichten des Betriebssystems auf der SD-Karte entfällt. Wenn Sie mehr wissen möchten, lesen Sie bitte Folgendes.
__Raspberry Pi Grundeinstellung Windows (@ sigma7641) __ https://qiita.com/sigma7641/items/995c7bb07eab408b9d0e __Raspberry Pi Grundeinstellung Mac (@skkojiko) __ https://qiita.com/skkojiko/items/a7e342a8ab53b409fe6a
Die Arbeit wird in der Befehlszeile erledigt und mit ssh verbunden. Der Befehlszeilentexteditor wird in Nano erklärt. Informationen zur Verwendung finden Sie weiter unten.
__GNU Nano-Meisterschaft (@snct_hu) __ https://qiita.com/snct_hu/items/971d512c26dd8b3a3b3c
Stellen Sie zunächst eine feste IP ein, um die Verbindung mit ssh zu vereinfachen.
$ sudo nano /etc/dhcpcd.conf
(Ändern Sie die IP-Adresse in einen geeigneten Inhalt und fügen Sie die folgenden Einstellungen hinzu.)
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
Informationen zu den WLAN-Einstellungen finden Sie im Folgenden. __ Raspberry Pi WLAN-Einstellungen in der Befehlszeile (@mym) __ https://qiita.com/mym/items/468d2cdb30d756b6df24
Grundlegende Betriebssystemeinstellungen werden mit raspi-config vorgenommen.
$ sudo raspi-config
Dieses Mal ist Folgendes eingestellt.
1 Change User Password
4 Localisation Options -> I1 Change Locale -> ja_JP.UTF-8 UTF-8 -> I2 Change Timezone -> Asia -> Tokyo -> I3 Tastaturlayout ändern-> Geeignet -> I4 Change Wi-fi Country -> JP Japan
5 Interfacing Options -> P1 Camera -> Enable -> P4 SPI -> Enable -> P5 I2C -> Enable
8 Update
Aktualisieren Sie das Betriebssystem nach dem Einstellen auf den neuesten Stand.
$ sudo apt-get update
$ sudo apt-get upgrade
Unten finden Sie die Einstellungen der Raspberry Pi-Kamera.
__Raspberry Pi Nehmen Sie Fotos und Videos mit einer Kamera auf __ https://iotdiyclub.net/raspberry-pi-using-camera-1/
Konfigurieren Sie nach Abschluss der Grundeinstellungen die Einstellungen für Pythons OpenCV (Bildbearbeitungsbibliothek).
$ sudo modprobe bcm2835-v4l2
$ sudo nano /etc/modules
bcm2835-v4l2
$ sudo apt-get install libopencv-dev python-opencv
Weitere Informationen zu OpenCV finden Sie weiter unten.
OpenCV https://opencv.org/ __ Python-Version der OpenCV-Grundlagen __ https://cvtech.cc/py-opencv/ __ Einführungskurs zur Bildverarbeitung: Bildverarbeitung ab OpenCV und Python __ https://postd.cc/image-processing-101/
Nehmen Sie bei Verwendung von Python3 die folgenden Einstellungen vor.
$ 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
Wenn Sie OpenCV wie in Python3 verwenden, tritt beim Import von cv2 ein Fehler auf. Um diesen Fehler zu vermeiden, fügen Sie die zu ladende Bibliothek hinzu.
$ nano .bashrc
export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1
$ source .bashrc
Informationen zur Installation von Grove Pi + auf Raspberry Pi finden Sie im Folgenden. GrovePi+ https://www.switch-science.com/catalog/2129/
Im Folgenden finden Sie Informationen zum Einstellen der Grove Pi + -Software. 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
Wenn nach der Installation kein Problem auftritt, können Sie den 04-Port von I2C mit dem Befehl i2c erkennung überprüfen (siehe unten).
$ 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: -- -- -- -- -- -- -- --
Nach dem Festlegen von Grove Pi + verursacht das apt-get-Upgrade, das das Betriebssystem und die installierte Software aktualisiert, ein Problem mit der Paketabhängigkeit und einen Fehler. Gehen Sie wie folgt vor, um diesen Fehler zu vermeiden:
$ sudo apt-get --fix-broken upgrade
Um zu testen, ob es tatsächlich funktioniert, verbinden Sie die mitgelieferte Grove-LED wie unten gezeigt mit dem D4-Port des Grove Pi +. http://wiki.seeedstudio.com/Grove-Red_LED/#play-with-raspberry-pi-with-grovepi_plus
Testen Sie nach der Verkabelung die folgende Versionsanzeige und die blinkende LED, um festzustellen, ob Probleme vorliegen.
$ 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!
Ab dem 02.02.2020 gibt es ein Problem mit der folgenden Datei der Grove Pi + -Bibliothek 1.3.0, und viele Beispiele funktionieren nicht. /home/pi/Dexter/GrovePi/Software/Python/grovepi.py https://github.com/DexterInd/GrovePi/blob/master/Software/Python/grovepi.py
Beispielsweise ist grove_button.py ein Programm, das die Schaltfläche AUS mit 0 und die Schaltfläche EIN mit 1 anzeigt. Bei Ausführung wird die Anzeige jedoch wie folgt angezeigt.
$ python /home/pi/Dexter/GrovePi/Software/Python/grove_button.py
255
255
255
255
255
255
Es gibt ein Problem mit dem I2C-Leseteil von __grovepi.py, das behoben werden muss. __ __ Die modifizierten Teile von grovepi.py werden unten erklärt.
Zeile 227 read_identified_i2c_block () Gelöscht, da die while-Anweisung für immer wiederholt wird
grovepi.py
def read_identified_i2c_block(read_command_id, no_bytes):
data = [-1]
data = read_i2c_block(no_bytes + 1)
return data
Zeile 246 Die Anzahl der Array-Elemente von analogRead () wurde korrigiert.
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]
Zeile 284 ultrasonicRead () Nummer Korrigierte Array-Elementnummer
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])
Zeile 320 Korrigierte Nummer Array-Elementnummer und no_bytes-Variablenwert von 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')]
Nach dem obigen Fix habe ich Folgendes getan und die erwarteten Ergebnisse erzielt.
$ python /home/pi/Dexter/GrovePi/Software/Python/grove_button.py
0
0
1
1
1
0
0
$ pip install pykintone
$ pip3 install pykintone
Stellen Sie Node-Red wie folgt ein.
$ 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
Sie können Node-Red verwenden, indem Sie mit einem Browser auf http: // Raspberry Pi IP-Adresse: 1880 / zugreifen. Siehe unten für Details. __Node-RED Auf Raspberry Pi ausführen __ https://nodered.jp/docs/getting-started/raspberrypi
Stellen Sie den Remotedesktop wie folgt ein.
$ 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
Sie können mit der IP-Adresse von Raspberry Pi wie folgt eine Verbindung zum Remotedesktop herstellen. Siehe unten für Details. __ Stellen Sie von einem Windows-Computer mit einem Remotedesktop (@ t114) eine Verbindung zu Himbeer-Pi3 her. __ https://qiita.com/t114/items/bfac508504b9a6b7570d
Ich habe eine Fehlermeldung erhalten, als ich opencv mit Raspeye [Remedy](@ XM03) in python3 eingefügt habe. 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
Hain - Knopf https://www.seeedstudio.com/Grove-Button.html http://wiki.seeedstudio.com/Grove-Button/#play-with-raspberry-piwith-grovepi_plus
Laufen Sie auf Node-RED Raspberry Pi https://nodered.jp/docs/getting-started/raspberrypi
Stellen Sie von einem Windows-Computer mit einem Remotedesktop (@ t114) eine Verbindung zu Himbeer-Pi3 her. https://qiita.com/t114/items/bfac508504b9a6b7570d
GitHub icoxfog417/pykintone https://github.com/icoxfog417/pykintone
Ein Fehler in __grovepi.py (nach Zeile 227) __ wurde behoben Es gibt eine Korrektur im Beschreibungsteil von (Y.K Bugfixes)
grovepi.py
(Weggelassen)
# 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')]
(Weggelassen)