[PYTHON] Ein Memorandum bei der Herstellung einer Überwachungskamera mit Raspeye

Ein Memorandum, als ich es geschafft habe, weil ich eine Überwachungskamera in einem unbemannten Raum brauchte. Die Motivation besteht darin, keinen externen Monitor und keine Tastatur zu verwenden

Was ich benutzt habe

Ich habe folgendes verwendet.

Raspbian (OS) Insco

$ #Holen Sie sich das neueste RASPBIAN
$wget https://downloads.raspberrypi.org/raspbian_latest
--2017-09-12 20:02:28--  https://downloads.raspberrypi.org/raspbian_latest
Resolving downloads.raspberrypi.org... 93.93.135.188, 93.93.128.211, 93.93.128.230, ...
Connecting to downloads.raspberrypi.org|93.93.135.188|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip [following]
--2017-09-12 20:02:31--  https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip
Connecting to downloads.raspberrypi.org|93.93.135.188|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://director.downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip [following]
--2017-09-12 20:02:32--  http://director.downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/2017-09-07-raspbian-stretch.zip
Resolving director.downloads.raspberrypi.org... 93.93.130.214, 93.93.130.104, 93.93.128.133, ...
Connecting to director.downloads.raspberrypi.org|93.93.130.214|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1757290390 (1.6G) [application/zip]
Saving to: 'raspbian_latest'

raspbian_latest                               100%[==============================================================================================>]   1.64G   271KB/s    in 2h 4m

2017-09-12 22:06:45 (230 KB/s) - 'raspbian_latest' saved [1757290390/1757290390]

wget https://downloads.raspberrypi.org/raspbian_latest  16.39s user 71.27s system 1% cpu 2:04:16.75 total

$ #Überprüfen Sie die Datei mit SHA1
$openssl sha1 raspbian_latest
SHA1(raspbian_latest)= c35688583510fc93c5deac637976b7a5c9c55689
openssl sha1 raspbian_latest  3.70s user 0.46s system 92% cpu 4.478 total

$ #Auftauen
$unzip raspbian_latest
Archive:  raspbian_latest
  inflating: 2017-09-07-raspbian-stretch.img
unzip raspbian_latest  32.40s user 4.09s system 87% cpu 41.859 total

$ #Überprüfen Sie die Datei
$ ls -al 
total 13033808
drwxr-xr-x   4 os10  staff         136  9 12 22:38 .
drwxr-xr-x  12 os10  staff         408  9 12 20:02 ..
-rw-r--r--   1 os10  staff  4916019200  9  8 01:23 2017-09-07-raspbian-stretch.img
-rw-r--r--   1 os10  staff  1757290390  9  8 01:30 raspbian_latest

SD-Kartenformat und Kopie von Raspbian

$ #* Setzen Sie zuerst die SD-Karte ein
$ diskutil list
...
/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.8 GB    disk2
   1:             Windows_FAT_32 NO NAME                 15.8 GB    disk2s1

$ #SD-Karte formatieren
$ diskutil eraseDisk FAT32 RPI /dev/disk2
Started erase on disk2
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk2s2 as MS-DOS (FAT32) with name RPI
512 bytes per physical sector
/dev/rdisk2s2: 30487440 sectors in 1905465 FAT32 clusters (8192 bytes/cluster)
bps=512 spc=16 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=30517248 bspf=14887 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk2

$ #SD-Karte aushängen
$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

$ sudo dd bs=16m if=2017-09-07-raspbian-stretch.img of=/dev/rdisk2
$ #Das Hinzufügen von r zum Gerätenamen ist etwa zehnmal schneller. Fortschritt ist Strg+Überprüfen Sie mit t.
$ #Die Bildkapazität beträgt 5 GB und 6 MB/Es war Sek. Geschwindigkeit, also waren es ungefähr 10 Minuten.
load: 2.00  cmd: dd 73563 uninterruptible 0.00u 0.04s
3+0 records in
2+0 records out
33554432 bytes transferred in 5.498053 secs (6102966 bytes/sec)
load: 2.00  cmd: dd 73563 uninterruptible 0.00u 0.07s
...
4916019200 bytes transferred in 461.069118 secs (10662217 bytes/sec)
sudo dd bs=16m if=2017-09-07-raspbian-stretch.img of=/dev/rdisk2  0.01s user 3.18s system 0% cpu 7:43.63 total

Aktivieren Sie SSH

Anscheinend wurde es kürzlich im Ausgangszustand deaktiviert

$ cd /Volumes
Macintosh HD boot
$ ls -al 
total 12
drwxr-xr-x@  4 root  wheel   136  9 13 00:54 .
drwxr-xr-x  34 root  wheel  1224  8 13 16:54 ..
lrwxr-xr-x   1 root  wheel     1  8 12 21:44 Macintosh HD -> /
drwxrwxrwx@  1 os10  staff  2048  9 13 00:54 boot

$ touch ./boot/ssh
$ #Es scheint, dass Sie eine leere Datei namens ssh im Boot-Ordner erstellen sollten

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

Verbinden Sie Raspeye mit dem Mac

Führen Sie die folgenden Schritte aus, um die Netzwerkfreigabe auf Ihrem Mac einzurichten.

  1. Öffnen Sie Systemeinstellungen> Freigabe
  2. Aktivieren Sie das Kontrollkästchen Internetfreigabe (Dienst)
  3. Aktivieren Sie das Kontrollkästchen Thunderbolt Ethernet (Ports) unter An Computer mit
  4. Starten Sie Raspeye und stellen Sie mit einem LAN-Kabel eine Verbindung zum Mac her

Stellen Sie mit SSH eine Verbindung zu Raspberry her

$ #Überprüfen Sie die Netzwerkschnittstelle(bridge***Schnittstelle mit Ethernet-Option)
$ ifconfig
...
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether a6:5e:60:ab:ad:64
        inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
        inet6 fe80::a45e:60ff:feab:ad64%bridge100 prefixlen 64 scopeid 0x10
        Configuration:
                id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
                maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
                root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
                ipfilter disabled flags 0x2
        member: en6 flags=3<LEARNING,DISCOVER>
                ifmaxaddr 0 port 15 priority 0 path cost 0
        nd6 options=201<PERFORMNUD,DAD>
        media: autoselect
        status: active
$ #Thunderbolt I, weil inet IPv4 ist/F wird
$ # -IP Adresse: 192.168.2.1
$ # -Subnetzmaske: 255.255.255.0(/24)
$ # -Broadcastadresse: 192.168.2.255
$ #Die Ziel-IP-Adresse lautet also 19.168.2.2~Im Bereich von 244

$ #Rufen Sie eine Liste der im Netzwerk vorhandenen Hosts ab
$ nmap -n -sP 192.168.2.1/24
Starting Nmap 6.47 ( http://nmap.org ) at 2017-09-13 02:37 PHT
Strange error from connect (65):No route to host
Nmap scan report for 192.168.2.1
Host is up (0.0058s latency).
Nmap scan report for 192.168.2.3
Host is up (0.0052s latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 0.03 seconds
$ #Diese IP-Adresse(192.168.2.3)Ist wie das

$ #SSH-Verbindung
$ ssh [email protected]  # [email protected] ist OK
[email protected]'s password: #PW ist Himbeere
$ # NOTE:Wenn sich die IDENTIFIZIERUNG DES FERNHOSTES GEÄNDERT hat, löschen Sie den Fingerabdruck mit dem folgenden Befehl
$ # ssh-keygen -R 192.168.2.3

Verwenden Sie VNC

Der Grund für die Verwendung von VNC besteht darin, das aufgenommene Bild zu überprüfen

--Mac-Einstellungen

Wlan einstellungen

--Stab Buffalos WLAN-Slave-Einheit in eine Raspeltorte stecken

Kameraeinstellungen

$ #Schließen Sie die USB-Kamera an den Raspelkuchen an
$ lsusb
Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
Bus 001 Device 005: ID 046d:0826 Logitech, Inc. HD Webcam C525
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ #Logitech Webcam wird erkannt

$ #Insco-Erfassungssoftware
$ sudo apt install fswebcam
...
Unpacking fswebcam (20140113-1) ...
Setting up fswebcam (20140113-1) ...
Processing triggers for man-db (2.7.6.1-2) ...

$ #Aufnahmetest
$ pwd
/home/pi
$ fswebcam -r 640x480 -F 1 -S 100 ./test.jpg # -F ist der Rahmen, -S ist Belichtung
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Fontconfig warning: ignoring UTF-8: not a valid region tag
Writing JPEG image to 'test.jpg'.
$ # /home/pi/test.Das Bild wird in JPG gespeichert. Überprüfen Sie es daher mit VNC.

$ #Software zur Einstellung der Kameraparameter
$ sudo apt install guvcview
$ # Menu > Sound & Video >Starten Sie guvcview

Bewegungssensoreinstellungen

$ sudo apt-get install -y motion

$ #Aufnahmetest
$ sudo motion -c /etc/motion/motion.conf
$ # /var/lib/motion/Es wird in gespeichert. Überprüfen Sie mit GUI

$ #Datei aktualisieren(Wie folgt)
$ sudo vi /etc/motion/motion.conf
#Führen Sie Motion als Dienst aus
daemon on
#Videofunktion AUS
ffmpeg_output_movies off
#Bildgrösse
width 640
height 480
#Bewegungserkennungsschwelle
threshold 3000 
gap 100
#Über das Bild
locate_motion_mode on #Lassen Sie uns den Bewegungserkennungspunkt kratzen
text_double on #Text groß

$ sudo vi /etc/default/motion
#Beim Start als Daemon ausführen
start_motion_daemon=yes 

Mit Slack benachrichtigen

Gehen Sie im Voraus wie folgt vor

--Slack Registrierung

  1. Installieren Sie Ihre App in Ihrem Arbeitsbereich (Zielteam)

Insco, ein abhängiges Modul von Python

$ sudo pip install slacker
pi@raspberrypi:~/slack $ sudo pip install slacker

Collecting slacker
  Downloading slacker-0.9.60.tar.gz
Requirement already satisfied: requests>=2.2.1 in /usr/lib/python2.7/dist-packages (from slacker)
Building wheels for collected packages: slacker
  Running setup.py bdist_wheel for slacker ... done
  Stored in directory: /root/.cache/pip/wheels/57/61/2c/99406ad2141fdf3ede576acedad209a3b63b9674af56bbfa19
Successfully built slacker
Installing collected packages: slacker
Successfully installed slacker-0.9.60

Test zum Versenden von Nachrichten

$ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from slacker import Slacker
>>> token = "HOGEHOGE" # OAuth Tokens for Your Team >  Bot User OAuth Access Token
>>> slk = Slacker(token)
>>> cn = "C71DQB3MG" #Der Kanalname ist codiert. Sie können es sehen, indem Sie sich die Slack-URL ansehen
>>> msg = 'Es ist eine API' 
>>> slk.chat.post_message(cn, msg)
<slacker.Response object at 0xb64aca50>

Bild-Upload-Test

$ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from slacker import Slacker
>>> token = "HOGEHOGE" # OAuth Tokens for Your Team >  Bot User OAuth Access Token
>>> slk = Slacker(token)
>>> cn = "C71DQB3MG"
>>> fn = '/home/pi/hoge.jpg'
>>> comment = "test"
>>> slk.files.upload(fn, channels=[cn], initial_comment=comment) #Poste ein Bild
 <slacker.Response object at 0xb64aca50>

Automatische Bildveröffentlichung mit Motion

Hängen Sie das Skript jedes Mal ein, wenn Sie ein Bild in den Bewegungseinstellungen speichern

$ sudo vi /etc/motion/motion.conf
#Sie können beim Speichern Skripte aus conf einbinden
on_picture_save python /home/pi/slack/bot.py %f # %f=Name der Bilddatei

$ cd /home/pi
$ mkdir slack
$ cd slack
$ vi bot.py #Skripterstellung später beschrieben
$ chmod a+x /home/pi/slack/bot.py #Ausführungsberechtigung erteilen
$ python ./bot.py /home/pi/test.jpg #Prüfung

bot.py


# -*- coding: utf-8 -*-
import sys
from slacker import Slacker
from datetime import datetime

class Slack(object):

    __slacker = None

    def __init__(self, token):
        self.__slacker = Slacker(token)

    def post_to_file(self, file_path, encoded_ch_name):
        now = datetime.now()
        comment = "Uploaded At: " + now.strftime('%Y-%m-%d %H:%M:%S') + '(UTC)'
        print("Sending a picture")
        self.__slacker.files.upload(file_path, channels=[encoded_ch_name], initial_comment=comment)
        print("Done")

if __name__ == "__main__":

    param = sys.argv
    file_path = param[1]

    token = "" # Bot User OAuth Access Token
    slack = Slack(token)
    encoded_ch_name = "C71DQB3MG"
    slack.post_to_file(file_path, encoded_ch_name)

Machen Sie Motion zu einem Daemon

$ #
$ sudo systemctl enable motion
$ sudo systemctl list-unit-files -t service #
$ sudo systemctl is-enabled motion #
motion.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install is-enabled motion
enabled
$ #

$ #
$ sudo systemctl set-default multi-user.target #(Bestätigung der Servicelisteneinstellung Bestätigung der Bewegungseinstellung aktiviert, also OK Änderung der Ausführungsstufe Ändern Sie das Standardziel in den Mehrbenutzermodus. Bewegung ist aktiviert, wenn das Gerät eingeschaltet wird)
$ sudo systemctl get-default
multi-user.target

$ #Starten und überprüfen Sie den Servicestatus
$ sudo systemctl start motion
$ sudo service motion status
● motion.service - LSB: Start Motion detection
   Loaded: loaded (/etc/init.d/motion; generated; vendor preset: enabled)
   Active: active (exited) since Wed 2017-09-13 01:19:37 UTC; 5h 51min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 5219 ExecStop=/etc/init.d/motion stop (code=exited, status=0/SUCCESS)
  Process: 5268 ExecStart=/etc/init.d/motion start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/motion.service

Sep 13 01:19:37 raspberrypi systemd[1]: Starting LSB: Start Motion detection...
Sep 13 01:19:37 raspberrypi motion[5268]: Starting motion detection daemon: motion.
Sep 13 01:19:37 raspberrypi systemd[1]: Started LSB: Start Motion detection.
Sep 13 01:19:38 raspberrypi motion[5274]: [0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
Sep 13 01:19:38 raspberrypi motion[5274]: [0:motion] [NTC] [ALL] motion_startup: Motion 4.0 Started
Sep 13 01:19:38 raspberrypi motion[5274]: [0:motion] [ERR] [ALL] myfopen: Error opening file /var/log/motion/motion.log with mode a: Permission denied
Sep 13 01:19:38 raspberrypi motion[5274]: [0:motion] [EMG] [ALL] motion_startup: Exit motion, cannot create log file /var/log/motion/motion.log: Permission denied

$ #Es scheint, dass es keine Berechtigung für den Bewegungsbenutzer gibt, also ändern Sie sie
$ sudo chown motion:motion /var/run/motion
$ sudo chown motion:motion /var/log/motion/motion.log

$ #Rückbestätigung
$ sudo systemctl start motion
$ sudo systemctl status motion
...
Sep 13 07:17:01 raspberrypi systemd[1]: Starting LSB: Start Motion detection...
Sep 13 07:17:02 raspberrypi motion[5860]: Starting motion detection daemon: motion.
Sep 13 07:17:02 raspberrypi systemd[1]: Started LSB: Start Motion detection.
Sep 13 07:17:03 raspberrypi motion[5866]: [0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
Sep 13 07:17:03 raspberrypi motion[5866]: [0:motion] [NTC] [ALL] motion_startup: Motion 4.0 Started
$ #Diesmal OK

$ #Wenn Sie das gesamte Serviceprotokoll anzeigen möchten
$ sudo journalctl -b | less #Überprüfen Sie alle Protokolle
$ sudo journalctl -u motion | less #Bewegungsprotokollprüfung

$ #Andere
$ sudo systemctl stop motion
$ sudo systemctl disable motion

Verweise

http://qiita.com/toshihirock/items/8e7f0887b565defe7989 https://medium.com/@tzhenghao/how-to-ssh-into-your-raspberry-pi-with-a-mac-and-ethernet-cable-636a197d055 http://qiita.com/wf9a5m75/items/6712181de189169eb444 http://www.pawprint.net/designresources/netmask-converter.php https://vivibit.net/raspbian-enable-ssh/ https://www.raspberrypi.org/forums/viewtopic.php?t=191252 http://daisukekmr.hatenablog.com/entry/2015/01/22/201919 http://qiita.com/kinpira/items/bf1df2c1983ba79ba455 http://a244.hateblo.jp/entry/2016/10/14/053000 http://qiita.com/Go-zen-chu/items/63f65156c748b34e1678 http://safe-linux.homeip.net/web/motion/motion-03.html https://github.com/yusukeyamatani/slackbot/blob/master/slack_bot.py https://github.com/os/slacker https://github.com/Motion-Project/motion/issues/309 https://raspberrypi.stackexchange.com/questions/41342/how-to-start-motion-in-daemon-mode-on-rpi-running-raspbian-jessie https://raspberrypi.stackexchange.com/questions/43740/how-do-i-change-runlevel-on-model-3

Recommended Posts

Ein Memorandum bei der Herstellung einer Überwachungskamera mit Raspeye
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Ich habe zum ersten Mal eine Überwachungskamera mit Raspberry PI gemacht.
Verwenden einer Webkamera mit Raspberry Pi
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Ich habe versucht, mit OpenCV eine Bewegungserkennungsüberwachungskamera mit einer WEB-Kamera mit Raspberry Pi herzustellen
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Telefonische Benachrichtigung, wenn eine Bewegung der Überwachungskamera auf dem Raspberry Pi erkannt wird
Bedienen Sie das Oszilloskop mit dem Raspberry Pi
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
GPGPU mit Raspberry Pi
Raspberry Pi Videokamera
DigitalSignage mit Raspberry Pi
Erklären Sie vorsichtig den Prozess der Erstellung einer einfachen Überwachungskamera ohne Server mithilfe von Raspeye, Gmail API und Line API
Ein Memorandum, wenn bei der Pip-Installation ein Fehler auftritt
Zeigen Sie das Bild der USB-Kamera mit OpenCV von Python mit Raspeye an
Spielen Sie mit dem Raspberry Pi Zero WH-Kameramodul Teil 1
Python-Anfänger öffnet und schließt die ineinandergreifende Kamera mit Raspberry Pi
Ich habe einen Ressourcenmonitor für Raspberry Pi mit einer Tabelle erstellt
getrpimodel: Erkennen Sie das Himbeer-Pi-Modell (A, B, B +, B2, B3 usw.) mit Python
[Raspberry Pi] Schrittmotorsteuerung mit Raspberry Pi
Ein Memorandum bei der Verwendung von schöner Suppe
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Servomotorsteuerung mit Raspberry Pi
So laden Sie Dateien mit Python in den Cloud-Speicher hoch [Erstellen Sie mit Raspberry PI # 1 eine Festkommakamera]
Ein Memorandum beim automatischen Erwerb mit Selen
Machen wir einen Fahrradcomputer mit Raspberry Pi Zero (W, WH)
Serielle Kommunikation mit Raspberry Pi + PySerial
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Weihnachtsklassiker (?) Einen Weihnachtsbaum mit Raspberry Pi und Philips Hue anzünden
Betriebssystem-Setup mit Raspberry Pi Imager
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Probieren Sie L Chika mit Himbeerpi
Hinweise zum Verbinden von Bluetooth von einem Smartphone / PC mit Raspeye 4
Aufbau eines VPN-Servers mit Raspberry Pie
Versuchen Sie, 3 Servos mit Raspeye zu bewegen
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
Ein Memo zur einfachen Verwendung des Beleuchtungsstärkesensors TSL2561 mit Raspberry Pi 2
Erkennen Sie analoge Signale mit dem A / D-Wandler mithilfe von Python auf Raspberry Pi 3!
[Elektronische Arbeit] Ich habe mit Raspberry Pi einen Suica Touch-Sounddetektor hergestellt
Erstellen Sie mit Raspberry Pi einen WLAN-Ethernet-Konverter und einen einfachen Router
[Python + PHP] Erstellen Sie mit Raspberry Pi einen Temperatur-, Feuchtigkeits- und Druckmonitor
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Messen Sie die SIM-Signalstärke mit Raspberry Pi
Haustierüberwachung mit Rekognition und Raspberry pi
Kenntnisse beim Erstellen eines Bots mit discord.py
[Raspberry Pi] Fügen Sie ein Thermometer und ein Feuchtigkeitsmessgerät hinzu
Raspberry Pi Security Infrarotkamera (Python Edition)
Hallo Welt mit Raspberry Pi + Minecraft Pi Edition
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Verbesserter menschlicher Sensor mit Raspberry Pi
Versuchen Sie die Objekterkennung mit Raspberry Pi 4 + Coral
Eine Problemumgehung bei der Installation von pyAudio mit pip.
Den Servomotor SG-90 mit Himbeer-Pi betreiben
Memorandum für die Migration mit GORM