Запуск веб-сервера на Raspberry Pi Pico W

Этот проект можно рассматривать как "Hello World!" для Pico W. Он демонстрирует, как подключиться к Wi-Fi, как запустить HTTP-веб-сервер на Pico W и как управлять выводами GPIO.

Если вы ищете быстрый и простой проект для начала работы с Pico, то этот проект для вас!

Шаги для мигания светодиода через WiFi на Pico W

Для того чтобы добиться этого, есть три главные темы.

Настройка MicroPython

Сначала необходимо настроить MicroPython. Скачайте файл UF2 здесь который специально предназначен для Pico W.

Кнопка Pico W Bootsel

Удерживая нажатой кнопку BOOTSEL, подключите Pico W через USB.

Как только он будет смонтирован, скопируйте файл UF2, который вы только что загрузили, на Pico.

Используйте Thonny для программирования Pico W

Thonny упрощает программирование Pico W и поставляется с предустановленной ОС Raspberry Pi. Вы также можете скачать его для Windows, Mac и Linux можно здесь.

Убедитесь, что ваш интерпретатор установлен на MicroPython (Raspberry Pi Pico).

IDE Thonny под управлением Micropython

Thonny подключится к Raspberry Pi Pico W, и вы сможете выполнять команды в оболочке (нижний сегмент IDE Thonny).

Запустите сканирование сети, чтобы убедиться, что беспроводная сеть Pico W работает

Thonny IDE запускает сканирование wlan

В Shell вы можете запустить этот код, чтобы проверить, работает ли ваш беспроводной чип.

Используйте этот код, чтобы распечатать все доступные беспроводные сети в вашем регионе.

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
print(wlan.scan())

Программирование веб-сервера

Создайте словарь под названием secrets.py и используйте следующее содержимое, заменив значения ssid и pw значениями вашей сети.

secrets = {
    'ssid': 'Replace-this-with-your-Wi-Fi-Name',
    'pw': 'Replace-this-with-your-Wi-Fi-Password'
    }

Затем создайте main.py в котором будет размещен ваш основной код. Поскольку код состоит из многих строк, вы можете найти его здесь, на нашем Github.

Создайте HTML-страницу, которая будет обслуживаться

Веб-сервер Pico W

Следующий файл будет HTML-файлом, который будет обслуживаться при загрузке IP-адреса Pico W. Сохраните его как index.html

Это простая страница с двумя кнопками, которые позволяют включать и выключать светодиод Pico W.

<!DOCTYPE html>
<html>
    <head>
        <title>Pico W</title>
    </head>
    <body>
        <h1>Pico W</h1>
        <p>Control the onboard LED</p>
        <a href=\"?led=on\"><button>ON</button></a> 
        <a href=\"?led=off\"><button>OFF</button></a>
    </body>
</html>

Время управлять всем этим

Веб-сервер Pico W

Нажмите на кнопку запуска в Thonny, которая представляет собой зеленую кнопку с символом игры.

Вы увидите IP-адрес Pico W. Скопируйте его в веб-браузер, подключенный к той же беспроводной сети.

Нажмите на кнопки, и вы увидите изменения.

Вы можете найти Репозиторий Github здесь, в котором есть все файлы.

Наш В видеоролике YouTube, посвященном этому проекту, также рассматриваются более глубокие детали, например, объяснение кода.

А если вы ищете другие проекты для вдохновения, то ознакомьтесь с серией проектов Paragon Projects здесь.

6 комментариев

  1. Pablo Июль 13, 2022 в 4:31 пп

    Ошибка обнаружена, когда я пытаюсь это сделать

    %Run -c $EDITOR_CONTENT
    Traceback (последний последний вызов):
    Файл "", строка 1, в
    ImportError: нет модуля с именем 'network'

  2. Charles Октябрь 25, 2022 в 8:51 пп

    В строке 100 вы используете функцию get_html(). Когда я запускаю ваш код, я получаю ошибку 'get_html' не определена.

  3. Gunther Ноябрь 28, 2022 в 12:51 дп

    Функция поиска по find также возвращает значение, если, например, реферер содержит строку 'led=xx'. Таким образом, и led_on, и led_off получают положительное значение одновременно, и светодиод снова выключается, когда он должен был включиться. Чтобы преодолеть это, оператор if должен быть расширен для проверки небольшого значения индекса (я использовал 20 только в качестве эмпирического правила):

    если (led_on > -1 и led_on -1 и led_off < 20):
    Теперь он работает так, как ожидалось.

    • Tonton Август 1, 2024 в 4:09 пп

      Я решил проблему, добавив линк:
      r = r[:50]
      авангард
      led_on = r.find('?led=on')
      led_off = r.find('?led=off')

      Cela retire les caractères superflus de la requête

  4. Gunther Ноябрь 28, 2022 в 12:53 дп

    Я пытался прокомментировать, но почему-то комментарий не выходит правильно...

Комментировать