Pico 2 W Projekte



Sonnenaufgang - Sonnenuntergang:

Um einen Verbraucher nach den Zeiten für den Sonnenaufgang bzw. Sonnenuntergang zu steuern, braucht man natürlich die entsprechenden Werte. Da sich diese aber täglich ändern und ausserdem von der geographischen Position abhängen, bezieht man sie am besten aus dem Internet. Dafür kann man die kostenlose API von https://api.sunrise-sunset.org nutzen und für eine vorgegeben Position einen Request im json-Format abrufen. Dazu verwendet man folgendes Format:
https://api.sunrise-sunset.org/json?lat=48.137222&lng=11.575277&date=today.
Damit der Pico W das erledigt, muss er mit dem WLAN Netz verbunden werden. Die entsprechenden Werte für 'SSID' und 'Pasword' in der Datei settings.toml müssen natürlich vorhanden sein. Dann können sie folgenden Code benutzen:

  
  
1  import os
2  import ipaddress
3  import ssl
4  import wifi
5  import socketpool
6  import adafruit_requests
7
8  JSON_URL = "https://api.sunrise-sunset.org/json?lat=48.137222&lng=11.575277&date=today"
9
10 print("Verbinde mit: ", os.getenv('CIRCUITPY_WIFI_SSID'))
11 wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
12
13 pool = socketpool.SocketPool(wifi.radio)
14 requests = adafruit_requests.Session(pool, ssl.create_default_context())
15
16 print("Json abrufen und analysieren von", JSON_URL)
17 response = requests.get(JSON_URL)
18 sunrise = response.json()['results']['sunrise']
19 sunset = response.json()['results']['sunset']
20
21 print("-" * 40)
22 print("Sunrise:", response.json()['results']['sunrise'])
23 print("Sunset :", response.json()['results']['sunset'])
24 print("-" * 40)
25 print("done")
  

Bei Ausführung erscheint in der Kommandozeile der Thonny IDE z.B die Ausgabe wie im unteren Bild. Die Werte für Latitude und Longitude im Beispiel sind auf dem Münchner Marienplatz und sollten durch Ihre entsprechend ersetzt werden.



Ich zeige noch ein Beispiel zum Ein- und Ausschalten der Onboard LED zur vollen Stunde der Sonnenauf- bzw. Untergangszeit. Dazu wird die LED in den Zeilen 11 bis 14 initialisiert. Der Pico wird wieder mit dem WLAN verbunden (Zeilen 16 bis 24). Da die Sonnenauf- und Untergangszeit im UTC-Format erfoglt, ist in den Zeilen 26 bis 36 eine Anpassung an die bei uns übliche mitteleuropäische Sommerzeit vorgenommen. Schließlich wird in der 'while-Schleife' ab Zeile 43 die aktuelle Stunde (Zeile 45) bestimmt und mit den Werten von 'hourrise' und 'hourset' verglichen.

  
  
1   import os
2   import time
3   import board
4   import ipaddress
5   import ssl
6   import wifi
7   import socketpool
8   import adafruit_requests
9   import digitalio
10
11  # Onboard-LED initialisieren
12  led = digitalio.DigitalInOut(board.LED)
13  led.direction = digitalio.Direction.OUTPUT
14  led.value = False
15
16  JSON_URL = "https://api.sunrise-sunset.org/json?lat=48.137222&lng=11.575277&date=today"
17  wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
18  pool = socketpool.SocketPool(wifi.radio)
19  requests = adafruit_requests.Session(pool, ssl.create_default_context())
20
21  print("Json abrufen und analysieren von", JSON_URL, "\n")
22  response = requests.get(JSON_URL)
23  sunrise = response.json()['results']['sunrise']
24  sunset = response.json()['results']['sunset']
25
26  # Anpassung der Stunde wegen der MEZS
27  if len(sunrise) == 10:
28      sunrise = sunrise[0:1]
29  else:
30      sunrise = sunrise[0:2]
31  hourrise = int(sunrise) + 1
32  if len(sunset) == 10:
33      sunset = sunset[0:1]
34  else:
35      sunset = sunset[0:2]
36  hourset = int(sunset) + 13
37
38  print("-" * 40)
39  print("Sunrise:", response.json()['results']['sunrise'], "also einschalten", hourset, "Uhr")
40  print("Sunset :", response.json()['results']['sunset'], "also ausschalten ", hourrise, "Uhr")
41  print("-" * 40)
42
43  while True:
44      current_time = time.localtime()
45      hour = current_time.tm_hour
46      # Lampe 18.00 Uhr an / 06.00 Uhr aus
47      if hour >= hourrise and hour < hourset:
48          led.value = False
49      if hour >= hourset and hour < hourrise:
50          led.value = True
  





Viel Spass und Erfolg beim Ausprobieren.