Сразу хочется отметить, что основной целью выпуска этой серии статей о продукции Raspberry Pi является ознакомление начинающих с возможностями микрокомпьютеров Raspberry Pi Model B и микроконтроллеров Rapberry Pi Pico. И если с микрокомпьютером Raspberry Pi Model B все более или менее ясно благодаря графическому интерфейсу, то есть, собрав элементы (плата, блок питания, монитор, клавиатура и мышь), соединив кабелями и подключив к электросети мы ожидаемо получим на мониторе что-то похожее на знакомый рабочий стол десктопного компьютера благодаря операционной системе, то с микроконтроллером все не так наглядно.

За то, что сэкономите на цене, вам вынужденно придется воспринять некоторые неудобства. Но если вы пройдете обучение вместе с нами, то непременно преодолеете все препятствия и реализуете свои идеи. Как известно, не для всех проектов необходима мощность микрокомпьютера и, соответственно, расходы на него (цена на Raspberry Pi Model B колеблется от примерно $100 за микрокомпьютер Raspberry Pi 4 Model B 1GB до примерно $160 за микрокомпьютер Raspberry Pi 4 Model B 8GB), а часто именно дешевый микроконтроллер может решить ваши вопросы, но его стоимость в 10 раз меньше: от примерно $8 за Микроконтроллер Raspberry Pi Pico, до примерно $12 за Микроконтроллер Raspberry Pi Pico W (Wi-Fi) с функцией беспроводной связи, о которой, кстати, и пойдет сегодня речь.

 

Так что начнем с Raspberry Pi Pico W!

Это относительно новый продукт Raspberry Pi, который добавляет функцию связи по беспроводной сети Wi-Fi к "классическому" Raspberry Pi Pico. В этой статье вы получите информацию о том, как использовать Raspberry Pi Pico W, как подключить его к сети Wi-Fi, а затем превратить его в веб-сервер для управления цифровыми выходами из браузера и получения данных датчиков.

Вот что вы получите на выходе, если пройдете вместе с нами все шаги настройки: при нажатии на программные кнопки в браузере вы будете включать и выключать зеленый светодиод на устройстве и параллельно измеряить температуру окружающего пространства.

 

 

Raspberry Pi Pico W может управляться с веб-страницы, а поддержка Wi-Fi позволяет легко наладить связь и с Интернетом. Кстати, именно эта технология Wi-Fi положила начало активному росту Интернета вещей (IoT).

Наши основные шаги:

  1. Подключить Raspberry Pi Pico W к концентратору Wi-Fi.
  2. Создать веб-сервер на Raspberry Pi Pico W для отображения веб-страницы.
  3. Использовать веб-страницу, для управления встроенным светодиодом Raspberry Pi Pico W и получать от него данные о температуре.


Для этого потребуются:

  1. Raspberry Pi Pico W и кабель данных micro USB
  2. Компьютер, подключенный к вашей сети
  3. Интегрированная среда разработки Thonny Python IDE (Integrated development environment). О ней можно прочитать в одной из наших предыдущих статей:  Изучаем Raspberry Pi. Часть 5. Программирование на Python. Представляем Thonny Python IDE.

 

Шаг 1. Установка Thonny Python IDE

Чтобы наше руководство было полным, вкратце напомним, что такое Thonny Python IDE и как его установить. Thonny Python IDE – это интегрированная среда разработки для Python, предназначенная для начинающих. Она собирает вместе или интегрирует различные инструменты, необходимые для написания или разработки программного обеспечения в едином пользовательском интерфейсе или среде. Доступно множество IDE, некоторые из которых поддерживают много разных языков программирования, но именно Thonny сосредоточен на поддержке одного языка – Python.

Доступно несколько опций установки Thonny Python IDE:

  • Установка Thonny на Raspberry Pi. Thonny уже установлен на ОС Raspberry Pi, но возможно его нужно обновить до последней версии. Откройте окно терминала, нажав значок в левом верхнем углу экрана или одновременно нажав Ctrl+Alt+T. В появившемся окне введите следующее, чтобы обновить ОС и Thonny:

sudo apt update && sudo apt upgrade -y

  • Установка Thonny на других операционных системах. В Windows, macOS и Linux можно установить последнюю версию Thonny IDE или обновить существующую версию. В веб-браузере перейдите на thonny.org. В правом верхнем углу окна браузера вы увидите ссылку для загрузки для Windows и macOS, а также инструкции для Linux. Загрузите соответствующие файлы и запустите их для установки Thonny.

 

Открытие Thonny.

Откройте Thonny на панели запуска приложений. Это должно выглядеть примерно так:

 

Вы можете использовать Thonny для написания стандартного Python кода. Введите следующее

print('Hello World!')

в главном окне, а затем нажмите кнопку "Выполнить/Run" (вам будет предложено сохранить файл).

 

Измените тему и шрифт Thonny

Thonny позволяет изменять тему и шрифт программного обеспечения. Эта функция означает, что вы можете увеличить размер шрифта и изменить цвета фона и текста в соответствии с вашими потребностями.

Чтобы изменить тему и шрифт:

  • Щелкните Инструменты -> Параметры.
  • Щелкните вкладку «Тема и шрифт».
  • Нажмите на нисходящие поля для каждого параметра, пока не найдете параметры, которые лучше всего соответствуют вашим потребностям.


  • Когда закончите, нажмите OK.

Предупреждение: соблюдайте простые, чистые шрифты. Если вы используете рукописный шрифт, это может осложнить чтение и отладку.

 

Шаг 2. Настройки Raspberry Pi Pico W

Подключите Raspberry Pi Pico W и настройте MicroPython (MicroPython — версия языка программирования Python для микроконтроллеров, например вашего Raspberry Pi Pico W. MicroPython позволяет использовать ваши знания Python для написания кода для взаимодействия с компонентами электроники).

1. Загрузите последнюю версию прошивки Raspberry Pi Pico W по адресу  https://rpf.io/pico-w-firmware

2. Подсоедините маленький конец кабеля micro USB к Raspberry Pi Pico W.

3. Удерживайте кнопку BOOTSEL на Raspberry Pi Pico W.

4. Подключите другой конец к настольному компьютеру, ноутбуку или Raspberry Pi.

5. Ваш файловый менеджер должен открыться, а Raspberry Pi Pico будет показан как внешний подключенный диск. Перетащите файл прошивки, который вы загрузили в файловый менеджер. Ваш Raspberry Pi Pico должен отключиться и файловый менеджер закроется.

6. Откройте редактор Thonny.

7. Посмотрите на текст в правом нижнем углу редактора Thonny. Он покажет вам версию используемой Python. Если там нет надписи MicroPython (Raspberry Pi Pico), щелкните текст и выберите из вариантов MicroPython (Raspberry Pi Pico).

7.1. Именно сейчас нужно отладить плату.

Возможны следующие варианты:

 

  • Я не знаю, установлена ли прошивка, и не могу подключиться к Pico. Убедитесь, что Raspberry Pi Pico W подключен к компьютеру с помощью кабеля micro USB. Нажмите список в правом нижнем углу окна Thonny. Появится всплывающее меню со списком доступных интерпретаторов.

Если вы не видите Pico в списке (как показано на рисунке), необходимо повторно подключить Raspberry Pi Pico W, удерживая кнопку BOOTSEL, чтобы подключить его как том накопителя, а затем повторно установить прошивку, следуя инструкциям в разделе выше.

 

  • Прошивка установлена, но я все еще не могу подключиться к Pico. Возможно, вы используете неподходящий кабель micro USB. Текущий кабель micro USB может быть поврежден или предназначен только для питания устройств, а не для передачи данных. Попытайтесь заменить кабель на другой, если ничего не помогло. Если Pico все равно не подключается после всех этих действий, возможно, он сам поврежден и не может подключиться.

 

8. Установка Picozero (это библиотека MicroPython, удобная для начинающих).

8.1. В Thonny выберите «Инструменты» > «Управление пакетами» .

 

8.2. В раскрывающемся окне «Управление пакетами для Raspberry Pi Pico» введите picozero и нажмите Поиск на PyPi .

 

8.3. Нажмите picozero в результатах поиска. Нажмите кнопку «Установить/Install».

После завершения установки закройте окно пакета, затем выйдите и снова откройте Thonny.

 

8.4. Если у вас возникли трудности с установкой picozero библиотеки в Thonny, вы можете загрузить файл библиотеки и сохранить его на Raspberry Pi Pico W. Для этого следуйте инструкциям:

 

Установка Picozero оффлайн

Если у вас нет доступа к Интернету на компьютере, подключаемом к Raspberry Pi Pico, или у вас нет разрешения на установку пакетов с помощью Thonny, вы все еще можете использовать библиотеку picozero.

Вы можете использовать другой компьютер, подключенный к Интернету, чтобы загрузить нужный файл, а затем сохранить его на флэш-накопителе USB.

  • Перейдите к файлу picozero.py в репозитории Picozero GitHub с помощью веб-браузера.
  • Щелкните правой кнопкой мыши на странице Picozero и выберите Сохранить страницу как .
  • Выберите место загрузки и оставьте имя файла неизменным, а именно Picozero.py


Вариант 1. Передайте файлы с помощью файлового менеджера Thonny

  • Подключите Raspberry Pi Pico к компьютеру с помощью кабеля microUSB.
  • Загрузите Thonny из меню программы, а затем в меню «Просмотр» выберите «Показать файлы».

  • Используйте путь, чтобы перейти в каталог, где вы сохранили файл picozero.py.

  • Щелкните правой кнопкой мыши picozero.py и выберите в меню «Загрузить в /Upload to».

Теперь вы должны увидеть новую копию библиотеки picozero.py на Raspberry Pi Pico.

 

Вариант 2. Скопируйте и вставьте файл с помощью Thonny

  • Выделите весь текст в picozero.py файле, нажав Ctrl+a на клавиатуре, а затем скопируйте его, нажав Ctrl+c.
  • Откройте Thonny, щелкните вкладку без названия и нажмите Ctrl + v , чтобы вставить содержимое picozero.py в файл.
  • Используйте Ctrl+s, чтобы сохранить файл, а когда появится запрос, выберите сохранить его в Raspberry Pi Pico

  • Назовите файл picozero.py и нажмите кнопку OK.

 

Если все сделано и замечаний нет, переходим к следующему шагу.

 

 

Шаг 3. Подключение Raspberry Pi Pico W к WLAN

На этом этапе вам придется немного пописать код. Так что не будем терять времени!

Для подключения к сети Wi-Fi необходимо знать идентификатор набора услуг (SSID). Это название сети Wi-Fi. Вам также понадобится пароль Wi-Fi. Обычно их можно найти на вашем беспроводном маршрутизаторе, хотя вам следовало изменить пароль по умолчанию на какой-то уникальный и для безопасности где-то его записать в безопасном месте.

 

1. В Thonny импортируйте пакеты, которые вам понадобятся для подключения к сети Wi-Fi, считывание показания встроенного датчика температуры и включение встроенного светодиода (LED). Это выполняется командой import. И сохраните файл с названием web_server.py

А вот – код:

import network
import socket
from time import sleep
from picozero import pico_temp_sensor, pico_led
import machine

Сохраните этот код и выберите опцию сохранения на этом компьютере.

 

2. Настройте Raspberry Pi Pico W на использование встроенного светодиода, а также дополнительно добавьте SSID и пароль для вашей сети. Это выполняется следующими кодами:

ssid = 'NAME OF YOUR WIFI NETWORK'
password = 'YOUR SECRET PASSWORD'

3. Теперь начните создавать функцию подключения к вашей WLAN. Вам нужно настроить wlan объект, активировать беспроводную связь и предоставить объекту свои ssid и password.

def connect():
    #Connect to WLAN
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(ssid, password)

4. Если вы когда-либо подключали устройство к сети Wi-Fi, вы знаете, что это не происходит мгновенно. Устройство посылает запросы маршрутизатору Wi-Fi для подключения, и когда маршрутизатор ответит, они будут выполнять так называемые рукопожатия для подключения. Чтобы сделать это с помощью Python, можно настроить цикл, который будет посылать запросы ежесекундно, пока не будет выполнено рукопожатие подключения.

    while wlan.isconnected() == False:
        print('Waiting for connection...')
        sleep(1)

5. Теперь распечатайте конфигурацию WLAN и проверьте все. Вам нужно будет вызвать свою функцию. Сохраняйте все вызовы функций в нижней части файла, чтобы они были последними строками выполняемого кода. Поскольку соединение Wi-Fi может оставаться без работы, даже когда вы останавливаете код, можно добавить try/ except, который сбросит Raspberry Pi Pico W, когда сценарий остановлен.

print(wlan.ifconfig())

try:
    connect()
except KeyboardInterrupt:
    machine.reset()

6. Тест: сохраните и запустите свой код.

Полный код программы:

 

 

Вы должны увидеть исходные данные в оболочке, которые будут выглядеть примерно так, хотя конкретные IP-адреса будут другими.

 

Что делать, если Raspberry Pi Pico W не подключается?

  • Убедитесь, что вы используете правильный SSID и пароль.
  • Если вы находитесь в школьной или рабочей WLAN, несанкционированным устройствам может быть запрещен доступ к Wi-Fi.
  • Отключите Raspberry Pi Pico W от компьютера, чтобы отключить его, а затем подключите снова. Это может быть проблемой, если вы подключились один раз, а затем попытаетесь подключиться снова.

 

 

7. Вам не нужна вся информация, которую предоставляет wlan.ifconfig(). Ключевой информацией, которая вам нужна, является IP-адрес Raspberry Pi Pico W, являющийся первой информацией. Для вывода IP-адреса можно использовать строку f . Разместив перед вашей строкой, переменные могут быть напечатаны, когда они окружены символом .f{}

 

8. Теперь вы можете вернуть значение IP-адреса своего Raspberry Pi Pico W и сохранить его во время вызова функции.

 

9. Сохраните код своего проекта и перейдем к следующему шагу.

 

 

Шаг 4. Открытие сокета

Немного справочной информации: Сокет — это способ, с помощью которого сервер может прослушивать клиента, который хочет к нему подключиться. Веб-страница, которую вы сейчас просматриваете, размещена на серверах Raspberry Pi Foundation. Эти серверы имеют открытый сокет, который ожидает, пока ваш веб-браузер установит соединение, после чего содержимое веб-страницы посылается на ваш компьютер. В этом случае вашим сервером будет ваш Raspberry Pi Pico W, а клиентом будет веб-браузер на другом компьютере.

 

Для открытия сокета необходимо указать IP-адрес и номер порта. Номера портов используются компьютерами, чтобы определить, куда отправлять запросы. К примеру, порт 80 обычно используется для веб-трафика; Stardew Valley использует порт 24642, когда вы играете в многопользовательскую игру. Когда вы настраиваете веб-сервер, вы будете использовать порт 80.

 

1. Создайте новую функцию, которую можно вызвать для открытия сокета. Он должен быть над вашим try/except. Начните с сокета IP-адреса и номера порта в файле web_server.py.

 

2. Теперь создайте свой сокет, а затем попросите его прослушать запросы на порт 80. Не забудьте вызвать свою функцию внизу кода.

 

3. Тест: запустите свой код, и вы должны увидеть результат, который выглядит примерно так.

socket state=1 сообщает, что ваш сокет работает.

 

4. Наконец, замените ваш print на return, а затем сохраните возвратное соединение сокета как переменную.

Теперь ваш Raspberry Pi Pico W ожидает подключения к своему IP-адресу на порте 80. Это значит, что он готов начать обслуживать HTML-код, чтобы подключенный веб-браузер мог видеть веб-страницу.

Не забудьте сохранить ваш файл с кодом!

 

 

Шаг 5. Создаем веб-страницу

На этом шаге мы создадим веб-страницу, которую веб-сервер, запущенный на Raspberry Pi Pico W, сможет отправить клиентскому веб-браузеру. Сначала мы протестируем веб-страницу на своем компьютере, чтобы убедиться, что она отображается правильно. На следующем шаге добавим код к сценарию Python, чтобы Raspberry Pi Pico W мог обслуживать веб-страницу:

 

Веб-страница может быть такой же простой, как текст, отформатированный таким образом, что веб-браузер отобразит ее и обеспечит определенную интерактивность. Хотя Thonny не предназначен для написания HTML, его можно использовать для этой цели. Однако вы можете использовать любимый текстовый редактор, если хотите, будь то VSCode, TextEdit или Блокнот.

В текстовом редакторе или Thonny создайте новый файл. Вы можете называть его как угодно, но index.html – это стандартное название для первой страницы, с которой взаимодействует пользователь. Убедитесь, что вы добавили .html расширение файла. Если вы используете Thonny, обязательно сохраните его на компьютере .


Существует некоторый стандартный HTML-код, который вам нужно включить для начала в файл index.html

 

1. Создадим кнопку для включения светодиода.

 

2. Сохраните файл, а затем найдите его в своем файловом менеджере. Если дважды щелкните файл, он должен открыться в веб-браузере по умолчанию. Вот как выглядит веб-страница в Google Chrome.

3. Добавьте вторую кнопку, чтобы выключить светодиод.

 

4. Чтобы закончить веб-страницу, вы можете добавить дополнительные данные, например состояние светодиода и температуру Raspberry Pi Pico W в файл index.html

 

Веб-страница должна выглядеть так:

 

5. Теперь, когда у вас есть рабочая веб-страница, вы можете добавить этот код в свой сценарий Python. Для начала вам нужно будет вернуться к коду Python в Thonny.

Создайте в файле web_server.py новую функцию webpage с двумя параметрами. Это temperature и state.

 

6. Теперь вы можете хранить весь свой HTML-код, который вы написали и проверили, в переменной. Использование fstrings для текста означает, что заполнители, которые вы имеете в HTML для temperature и state можете вставить в вашу строку в коде файла web_server.py

 

7. И наконец, вы можете вернуть html строку из вашей функции (в файле web_server.py)

 

8. Сохраните проект.

 

Вы еще не можете проверить этот код, поскольку программа еще не обслуживает HTML. Это будет решено на следующем шаге.

Простой HTML-код, который вы только что написали, будет сохранен в сценарии MicroPython и подан в браузер любых компьютеров, подключаемых к нему через вашу сеть, так же, как веб-страница, хранящаяся на любом другом сервер в мире. Важным отличием является то, что только устройства, подключенные к сети Wi-Fi, могут получить доступ к веб-странице или управлять вашим Raspberry Pi Pico W. Эта страница является очень простой демонстрацией того, что возможно. Чтобы узнать больше о кодировании HTML и создании физических проектов, следите за нашими статьями в разделе Блог на нашем сайте, ибо в следующей статье мы будем заниматься именно этим!

 

 

Шаг 6. Взаимодействуем с веб-страницей

На этом этапе запустим веб-сервер, чтобы клиент мог подключиться к нему, управлять светодиодом и считывать температуру вот так:

1. Создайте функцию, которая будет запускать веб-сервер, используя connection объект, который сохранили как параметр. Для ваших данных HTML нужно установить переменные state and temperature. Для начального состояния будет установлено значение 'OFF', а для температуры – 0. Вы также должны убедиться, что светодиодный индикатор не горит при запуске сервера.

Добавляем в файл web_server.py

Когда ваш веб-браузер запрашивает подключение к Raspberry Pi Pico W, подключение нужно принять. После этого данные, отправленные с вашего веб-браузера, должны быть выполнены определенными фрагментами. Вы также должны знать, какой запрос делает ваш веб-браузер — он задает только простую страницу? Он спрашивает страницу, которой нет?

 

2. Вы хотите, чтобы веб-сервер постоянно работал и прослушивал, чтобы любой клиент мог к нему подключиться. Сделать это можно, добавив while True: цикл. Добавьте эти пять строк кода, чтобы принять запрос и print(), чтобы увидеть, каким был запрос. Добавьте вызов в свою serve функции в своих вызовах в нижней части кода. (Файл web_server.py)

 

3. Тест: запустите приложение, а затем введите IP-адрес в адресную строку браузера на вашем компьютере.

Вы должны увидеть что-то похожее в выводе оболочки в Thonny.

 

4. Далее вам нужно отправить HTML-код, который вы написали, в веб-браузер клиента. (Файл web_server.py)

 

5. Обновите страницу после повторного запуска кода. Нажмите на отображаемые кнопки. В Thonny вы должны увидеть, что есть два разных выхода из вашей оболочки.

b'GET /lighton? HTTP/1.1\r\nHost: 192.168.1.143\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\nAccept-Language: en-GB,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\nReferer: http://192.168.1.143/\r\nUpgrade-Insecure-Requests: 1\r\n\r\n'

и

b'GET /lightoff? HTTP/1.1\r\nHost: 192.168.1.143\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\nAccept-Language: en-GB,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\nReferer: http://192.168.1.143/lighton?\r\nUpgrade-Insecure-Requests: 1\r\n\r\n'

Обратите внимание, что у вас есть /lighton? и lightoff? в запросах. Их можно использовать для управления встроенным светодиодом вашего Raspberry Pi Pico W.

 

5. Разделите строку запроса, а затем выберите первый элемент в списке. Иногда строка запроса может не быть разделена, поэтому лучше всего справиться с этим с помощью try/except.

Если первый элемент в разделе есть lighton? Вы можете включить светодиод. Если это так, lightoff? вы можете выключить светодиод. (Файл web_server.py)

 

6. Запустите код еще раз. В этот раз при обновлении окна браузера и нажатии кнопок встроенный светодиод должен включаться и выключаться.


7. Вы также можете сообщить пользователю веб-страницы о состоянии светодиода. (web_server.py)

 

8. Теперь, когда вы запускаете код, текст состояния светодиода также должен измениться на обновленной веб-странице.

9. Наконец, можно использовать встроенный датчик температуры, чтобы получить примерное значение температуры и отобразить его на своей веб-странице. (Файл web_server.py)

 

10. Тест: Вы можете подержать руку над Raspberry Pi Pico W, чтобы увеличить его температуру, а затем обновить веб-страницу на компьютере, чтобы увидеть новое отображаемое значение.

 

Итоги

Поздравляю, мы вместе прошли все шаги по настройке микроконтроллера с помощью среды разработки Thonny Python IDE! Также мы научились создавать соединения через сокет и управлять веб-страницей для управления элементами Raspberry Pi Pico W. Эти знания уже позволят вам изменяя код изменять функциональность проекта, но самое интересное – впереди: в следующей статье мы рассмотрим целых 20 разнообразных проектов, которые можно легко реализовать с помощью микроконтроллера Raspberry Pi Pico W и ваших знаний по его управлению!