Picomotion
Angelegt Samstag 20 Mai 2023
Ein frei programmierbarer PIR Bewegungsmelder mit MQTT Interface, WLAN, telnet, TFTP für 10.- €
Die Hardware
Raspberry Pi Pico W mit PIR Bewegungsmelder
Eigenschaften
- WLAN Interface
- Telnet Interface
- TFTP Interface
- NTP Zeit
- MQTT Client
- WATCHDOG
- BASIC programmierbar
- Onboard Dateisystem
- Kosten ohne Stromversorgung < € 10.-
- Kosten mit Steckernetzteil und z.B. 5m USB Kabel < € 20.-
Der PIR Sensor hat 3 Anschlüsse und ist wie folgt mit dem Pico verbunden:
PIR . . . . . PICO VCC ---------- VSYS OUT ---------- GP6 GND ---------- GND
Die Software
OPTIONEN des Pico W
WebMite MMBasic Version 5.07.08b2 OPTION AUTORUN 3 OPTION LIBRARY_FLASH_SIZE 14000 OPTION COLOURCODE ON OPTION KEYBOARD GR OPTION HEARTBEAT OFF OPTION DISPLAY 50, 100 OPTION WIFI FritzBox, ********************* OPTION TELNET CONSOLE ON
Das Programm: motion.bas
' Sensor Garten (A) OPTION EXPLICIT DIM sensor As String = "Garten" DIM mqttbroker As String = "192.168.178.54" DIM ntpserver As String = "192.168.178.1" DIM timezone As Integer = 2 SetPin gp6, din, PULLDOWN ' PIR sensor On ERROR SKIP 3 WEB ntp timezone,ntpserver$ If MM.Errno Then WEB NTP timezone,ntpserver$ If MM.Errno Then Print "connection error" : CPU RESTART Open "logfile.bas" For append As #1 If Lof(#1) < 5 Then Print #1, "New Logfile: "+Date$+" "+Time$ EndIf If Lof(#1) > 20000 Then Close #1 Rename "logfile.bas" As "logfile-old.bas" Open "logfile.bas" For append As #1 Print #1, "New Logfile: "+Date$+" "+Time$ EndIf Print #1, sensor$+": "+Date$+" "+Time$ Close #1 Sub ThereIsMotion() ' connect to MQTT broker (mosquitto) on a raspberry pi 4 On ERROR SKIP 3 WEB MQTT CONNECT mqttbroker$,1883,"anon","anon" WEB MQTT PUBLISH "motion",Chr$(34)+Date$+", "+Time$+", "+sensor$+Chr$(34) WEB MQTT CLOSE Print Date$,Time$,sensor$ End Sub Do ' main loop WatchDog 60000 ' restart cpu if this line is not passed within 60 seconds. DoConnect ' see library If Pin(gp6) = 1 Then ' PIR sensor has detected a motion ThereIsMotion EndIf forcedreboot("02:00:05") Pause 1500 ' slow down Loop
Hinweis: Das onboard Logfile ist nur dazu da, die Einschaltvorgänge zu protokollieren, nicht die Bewegungen. Diese werden zum MQTT Server gesendet.
Als NTP Server verwende ich meine FritzBox. Als MTTQ broker einen Raspberry Pi 4.
Die Library
Die Library ist ein WebMite Feature, welches die Programmierung eigener BASIC-Befehle gestattet und automatisch geladen wird. Diese "Autostart" Eigenschaft kann dafür genutzt werden den Pico sicher mit einem WLAN zu verbinden. Zusätzlich muss dem Pico über die OPTION WIFI "SSID","PASSWORT" mitgeteilt werden, mt welchem WLAN er sich verbinden soll. Dies muss nur einmal geschehen und wird bei folgenden Starts automatisch durchgeführt.
' library Function st(t$) As integer st = Val(Mid$(t$,1,2)) End Function Function mi(t$) As integer mi = Val(Mid$(t$,4,2)) End Function Function se(t$) As integer se = Val(Mid$(t$,7,2)) End Function Sub forcedreboot t$ If st(t$) = st(Time$) And mi(t$) = mi(Time$) And Abs(se(Time$) - se(t$)) < 3 Then CPU restart EndIf End Sub Sub Connect Do While MM.Info(TCPIP STATUS) <> 3 If Timer > 6000 Then CPU restart Loop Print "IP: ";MM.Info(ip address) End Sub Sub DoConnect If MM.Info(TCPIP STATUS) <> 3 Then Connect EndIf End Sub DoConnect
Die Flashbelegung
> flash list Slot 1 in use: "'#A:/library.bas" <- Quellcode der Library Slot 2 available Slot 3 in use: "'Sensor Garten (A)" Slot 4 in use: Library <- aktive Library
Der MQTT CLient (IoT MQTT panel) auf meinem Android Handy
Das klappt via wireguard vpn von beliebigen Standorten ;)
Installation eines MQTT-Brokers auf einem Raspberry Pi 4
sudo apt update && sudo apt upgrade sudo apt install -y mosquitto mosquitto-clients sudo systemctl enable mosquitto.service sudo nano /etc/mosquitto/mosquitto.conf diese zwei Zeilen an das Ende anfügen: listener 1883 allow_anonymous true save&exit with 'ctrl x' and 'y' sudo systemctl restart mosquitto.service
Nicht vergessen den Firewall Port 1883 zu öffnen, falls eine Firewall auf dem MQTT Server läuft!
Das Handbuch zur Firmware und dem MMBASIC: https://geoffg.net/webmite.html
Bezug Hardware: Raspberry Pi Pico W , PIR Sensor
Viel Spaß!