{"id":4042,"date":"2025-03-27T12:02:58","date_gmt":"2025-03-27T11:02:58","guid":{"rendered":"https:\/\/www.rommelkist.nl\/elec\/?p=4042"},"modified":"2025-03-28T22:30:53","modified_gmt":"2025-03-28T21:30:53","slug":"van-zero-naar-pico","status":"publish","type":"post","link":"https:\/\/www.rommelkist.nl\/elec\/elektronica\/van-zero-naar-pico\/","title":{"rendered":"Van Zero naar Pico"},"content":{"rendered":"\n<p>Wanneer je iets specifieks wilt bereiken met het gepruts wat ik zoal doe, ben ik vaak lang onderweg. Veel zoeken op internet. Uitproberen en weer zoeken. Maar &#8230; inmiddels ben ik aardig handig geworden in het gebruik van AI. Over waar ik het op dit moment voor gebruik (mijn gepruts met Python en Raspberry Pi&#8217;s) ben ik er erg enthousiast over. Onderstaande is dan ook voornamelijk met behulp van Gemini tot stand gekomen.<\/p>\n\n\n\n<div class=\"wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-94bc23d7 wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-94bc23d7 wp-block-group-is-layout-flex\">\n<div class=\"wp-block-group is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-94bc23d7 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/03\/image-20.png\"><img loading=\"lazy\" decoding=\"async\" width=\"757\" height=\"526\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/03\/image-20.png\" alt=\"\" class=\"wp-image-4053\" style=\"width:250px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-20.png 757w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-20-300x208.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-20-425x295.png 425w\" sizes=\"auto, (max-width: 757px) 100vw, 757px\" \/><\/a><figcaption class=\"wp-element-caption\">Raspberry Pi Zero W<\/figcaption><\/figure>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/03\/image-22.png\"><img loading=\"lazy\" decoding=\"async\" width=\"493\" height=\"292\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/03\/image-22.png\" alt=\"\" class=\"wp-image-4058\" style=\"width:300px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-22.png 493w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-22-300x178.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-22-425x252.png 425w\" sizes=\"auto, (max-width: 493px) 100vw, 493px\" \/><\/a><figcaption class=\"wp-element-caption\">Raspberry Pi Pico 2 W<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Ik wilde na mijn gerommel van de <a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/raspberry-pi-zero-wat-rommelen\/\" data-type=\"post\" data-id=\"3991\">vorige keer<\/a>, LEDs aangesloten op een Raspberry Pi Pico (PicoW) via UDP bedienen vanaf een website op een Raspberry Pi Zero (RaspiZero1). Globaal ziet dat er zo uit. Aan de PicoW hangt op dit moment een OLED, een tweetal LEDs (en nog geen motor). Aan de RaspiZero1 nog de LED-array (6 LEDs), waar ik nu even niets mee doe.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/03\/image-19.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"532\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/03\/image-19-1024x532.png\" alt=\"\" class=\"wp-image-4044\" style=\"width:450px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-19-1024x532.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-19-300x156.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-19-768x399.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-19-425x221.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-19.png 1042w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Op de Zero (192.168.2.65) draait weer de Flask-webserver met onderstaande Python-script.<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">from flask import Flask, render_template, request\nimport socket\n\napp = Flask(__name__)\n\nUDP_IP = \"192.168.2.68\" # Vervang door het IP-adres van je Pico\nUDP_PORT = 8006 # Kies een poortnummer\n\n@app.route(\"\/\", methods=[\"GET\", \"POST\"])\ndef index():\n    if request.method == \"POST\":\n        led_status = request.form.get(\"led\")\n        print(\"led_status:\", led_status) # Controleer de waarde van led_status\n        if led_status:\n            sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n            sock.sendto(led_status.encode(), (UDP_IP, UDP_PORT))\n            print(\"UDP-pakket verzonden\") #voeg deze regel toe\n    return render_template(\"index.html\")\n\nif __name__ == \"__main__\":\n    app.run(host=\"0.0.0.0\", port=80) # Zorg ervoor dat de server toegankelijk is op je netwerk.<\/pre>\n\n\n\n<p>Met onderstaande index.html pagina.<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">&lt;!DOCTYPE html>\n&lt;html>\n&lt;head>\n    &lt;title>LED Control&lt;\/title>\n&lt;\/head>\n&lt;body>\n    &lt;h1>LED Control&lt;\/h1>\n    &lt;form method=\"post\">\n        &lt;button type=\"submit\" name=\"led\" value=\"led1_on\">LED 1 Aan&lt;\/button>\n        &lt;button type=\"submit\" name=\"led\" value=\"led1_off\">LED 1 Uit&lt;\/button>\n        &lt;br>&lt;br>\n        &lt;button type=\"submit\" name=\"led\" value=\"led2_on\">LED 2 Aan&lt;\/button>\n        &lt;button type=\"submit\" name=\"led\" value=\"led2_off\">LED 2 Uit&lt;\/button>\n    &lt;\/form>\n&lt;\/body>\n&lt;\/html><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/03\/image-18.png\"><img loading=\"lazy\" decoding=\"async\" width=\"339\" height=\"358\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/03\/image-18.png\" alt=\"\" class=\"wp-image-4043\" style=\"width:250px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-18.png 339w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/03\/image-18-284x300.png 284w\" sizes=\"auto, (max-width: 339px) 100vw, 339px\" \/><\/a><figcaption class=\"wp-element-caption\">De web-pagina vanaf de Zero.<\/figcaption><\/figure>\n\n\n\n<p>Op de Pico draait het onderstaande Python script.<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">import network\nimport socket\nimport machine\n\nfrom machine import Pin, SoftI2C\nimport ssd1306\n\n#You can choose any other combination of I2C pins\ni2c = SoftI2C(scl=Pin(5), sda=Pin(4))\n\noled_width = 128\noled_height = 64\noled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c, addr = 0x3c)\n\nLED1_PIN = 16 # Vervang door de GPIO-pin van LED 1\nLED2_PIN = 17 # Vervang door de GPIO-pin van LED 2\n\nled1 = machine.Pin(LED1_PIN, machine.Pin.OUT)\nled2 = machine.Pin(LED2_PIN, machine.Pin.OUT)\n\nwlan = network.WLAN(network.STA_IF)\nwlan.active(True)\nwlan.connect(\"IthurtswhenIP\", \"XXXXXX\") # Vervang door je wifi-gegevens\n\nwhile not wlan.isconnected():\n    machine.idle()\n\nprint(\"Verbonden met WiFi, IP-adres:\", wlan.ifconfig()[0])\n\nUDP_PORT = 8006 # Zorg ervoor dat dit overeenkomt met de poort in je Flask-app\n\nsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\nsock.bind((\"0.0.0.0\", UDP_PORT))\n\nwhile True:\n    data, addr = sock.recvfrom(1024)\n    print(\"UDP-pakket ontvangen:\", data, addr)\n    message = data.decode()\n    if message == \"led1_on\":\n        led1.value(1)\n        oled.fill(0)\n        oled.text('LED 1 aan!', 0, 0)\n    elif message == \"led1_off\":\n        led1.value(0)\n        oled.fill(0)\n        oled.text('LED 1 uit!', 0, 0)\n    elif message == \"led2_on\":\n        led2.value(1)\n        oled.fill(0)\n        oled.text('LED 2 aan!', 0, 10)        \n    elif message == \"led2_off\":\n        led2.value(0)\n        oled.fill(0)\n        oled.text('LED 2 uit!', 0, 10)\n    oled.show() <\/pre>\n\n\n\n<p>In eerste instantie wilde e.e.a. niet werken. Eerst stond er achter sock.bind de standaard:<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">sock.bind((\"\", UDP_PORT))<\/pre>\n\n\n\n<p>De regel aanpassen naar (wat mij logisch leek):<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">sock.bind((\"192.168.2.65\", UDP_PORT))<\/pre>\n\n\n\n<p>werkte dus ook niet. Maar met:<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">sock.bind((\"0.0.0.0\", UDP_PORT))<\/pre>\n\n\n\n<p>werkte het uiteindelijk wel.<br>Op de webpagina een LED-button aanklikken zorgt ervoor dat de betreffende LED op de Pico aan, dan wel uit gaat. Tevens verschijnt er in het OLED-scherm een melding dat een LED aan, dan wel uit is. De opdracht:<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">oled.fill(0)<\/pre>\n\n\n\n<p>wist het OLED-scherm. En<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">oled.show() <\/pre>\n\n\n\n<p>toont de inhoud op het scherm.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wanneer je iets specifieks wilt bereiken met het gepruts wat ik zoal doe, ben ik vaak lang onderweg. Veel zoeken op internet. Uitproberen en weer zoeken. Maar &#8230; inmiddels ben ik aardig handig geworden in het gebruik van AI. Over waar ik het op dit moment voor gebruik (mijn gepruts met Python en Raspberry Pi&#8217;s) ben ik er erg enthousiast over. Onderstaande is dan ook voornamelijk met behulp van Gemini tot stand gekomen. Ik wilde na mijn gerommel van de vorige keer, LEDs aangesloten op een Raspberry Pi Pico (PicoW) via UDP bedienen vanaf een website op een Raspberry Pi Zero (RaspiZero1). Globaal ziet dat<span class=\"more-link\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/van-zero-naar-pico\/\">Read More &rarr;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,74],"tags":[175,176,102,173,171,174],"class_list":["entry","author-admin","post-4042","post","type-post","status-publish","format-standard","category-elektronica","category-raspberry-pi","tag-ai","tag-gemini","tag-python","tag-raspberry-pi-pico","tag-raspberry-pi-zero","tag-udp"],"_links":{"self":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/4042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/comments?post=4042"}],"version-history":[{"count":0,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/4042\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/media?parent=4042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/categories?post=4042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/tags?post=4042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}