Начало работы с беспроводным модулем на плате Raspberry Pi Pico W

Raspberry Pi Trading анонсировала плату Raspberry Pi Pico W, основанную на том же дизайне, что и оригинальная плата Raspberry Pi Pico с двухъядерным микроконтроллером Cortex-M0+ RP2040, но с добавлением беспроводного модуля с WiFi 4 и Bluetooth LE 5.2, хотя пока последний не включен на плате.

Компания прислала нам образец для обзора/оценки, и мы сосредоточимся на части WiFi, поскольку Raspberry Pi Pico W поддерживает те же SDK MicroPython и C/C++, что и плата Raspberry Pi Pico, а также дополнительные API для беспроводного подключения.

Распаковка Raspberry Pi Pico W

Плата, которую мы получили, была вырезана из катушки на 480 единиц, и мы также получили кабель micro USB к USB длиной один метр, который, вероятно, не должен быть включен по умолчанию для людей, заказывающих плату за 6 долларов.

Как и его предшественник, плата крошечная.

Распиновка такая же, как у первой платы RP2040, и четко обозначена на нижней стороне платы.

Подключение Raspberry Pi Pico W к компьютеру

Как только мы подключим плату к главному компьютеру, она должна появиться на вашем компьютере как диск RPI-RP2. Наш ноутбук работает под управлением Ubuntu 20.04, но результат будет таким же в Windows или macOS.

На диске есть два файла: INFO_UF2.txt с некоторой информацией о версии загрузчика UF2 и модели платы, и INDEX.HTM, который перенаправляет на документацию Pico на веб-сайте Raspberry Pi. Так что здесь ничего не изменилось.

Вот вывод из журнала ядра для справки:

Wi-Fi с MicroPython

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

Мы найдем нужный файл прошивки на веб-сайте Raspberry Pi или загрузим его напрямую следующим образом:

Как только мы загрузим его, просто скопируйте rp2-pico-w-latest.uf2 на диск RPI-RP2…

… и скоро диск исчезнет, ​​а Raspberry Pi Pico W теперь будет отображаться как последовательное устройство:

Что мы также можем обнаружить в BootTerm (или других инструментах, таких как Putty, minicom, tio и т. д.):

Если мы подключимся к последовательному устройству, мы сможем войти в интерфейс REPL, где мы можем ввести несколько команд, чтобы вывести список точек доступа 2,4 ГГц:

Работает. Обнаружена только одна видимая точка доступа, потому что мы живем в сельской местности. Другое значение (“) предназначено для скрытого SSID, открытого на нашем маршрутизаторе Xiaomi. Согласно документации API MicroPython, пять других значений относятся к bssid, номеру канала, RSSI, режиму авторизации и скрытому статусу, но последние два числа находятся за пределами допустимого диапазона:

Существует пять значений безопасности:

  • 0 – открыть
  • 1 – WEP
  • 2 – WPA-PSK
  • 3 — WPA2-PSK
  • 4 — WPA/WPA2-PSK

и два для скрытых:

  • 0 — видимый
  • 1 – скрытый

Чтобы пойти дальше, мы рассмотрим документацию «Подключение к Интернету» для платы. Самый простой способ обновить код — сначала установить редактор Thonny:

Мы можем запустить предыдущую программу MicroPython в Thonny IDE без каких-либо проблем после перехода в «Выполнить» – > «Выбрать интерпретатор» и выбрать «MicroPython (Raspberry Pi Pico)».

Давайте подключимся к CNX_Software_Xiaomi SSID с помощью следующей программы:

Наш Raspberry Pi Pico W получил IP-адрес, и мы можем успешно пропинговать его:

Для справки, в сети он отображается как PYPB:

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

Это будет особенно полезно, если ваша плата не может подключиться к маршрутизатору из-за недоступных каналов.

Типичным вариантом использования платы этого типа является наличие веб-интерфейса для управления светодиодами или GPIO. Давайте запустим веб-сервер для управления пользовательским светодиодом на плате:


Код немного длинный, так как он также включает обработку ошибок. Он отлично работает, как вы можете видеть из короткого демо-видео ниже.

Код можно легко изменить для управления реле или GPIO.

Также можно установить и запустить популярный инструмент iperf3 на Raspberry Pi Pico W:

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

На наш взгляд, довольно медленно, хотя производительность не всегда является основным требованием для этого типа платформы. Это типично (для этого теста) для этого класса оборудования, поскольку, для справки, Дэмиен Джордж (главный разработчик MicroPython) протестировал его на плате Pyboard серии D и показал скорость около 7 Мбит/с.

Если в объявлении нам сказали, что Raspberry Pi Pico W также можно использовать в качестве точки доступа до четырех клиентов. Мы не нашли руководства по этому поводу в MicroPython, но есть инструкции для ESP8266 и ESP32, так что давайте попробуем настроить CNX-PICO SSID и подключиться с телефона:

Хорошая новость заключается в том, что наш Raspberry Pi Pico W теперь действительно является точкой доступа, но менее хорошая новость заключается в том, что пользовательская конфигурация ssid не сработала, и вместо этого плата автоматически сгенерирует имя точки доступа (PICO349B) с открытой сетью. .

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

Использование WiFi на Raspberry Pi Pico W с программированием на C

Давайте попробуем воспроизвести приведенные выше примеры кода с помощью C/C++ SDK. Если вы еще этого не сделали, вам нужно настроить SDK, как мы это сделали для платы Raspberry Pi Pico, и получить образцы на компьютере с Linux или плате Raspberry Pi:

Теперь есть новый каталог для Pico W:

Вот пример кода сканирования WiFi:

Это немного сложнее, чем наш пример MicroPython выше. Давайте подготовим систему для сборки образцов C:

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

Теперь мы можем собрать пример wifi_scan:

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

Сборка сгенерирует кучу файлов, включая файл UF2, который мы будем использовать для копирования на плату:

Поскольку мы уже установили прошивку MicroPython на плату, нам нужно нажать кнопку BOOT и выключить и снова включить плату, чтобы перейти в режим запоминающего устройства, и скопировать файл picow_wifi_scan_poll.uf2 на диск RPI-RP2.

Диск будет перезагружен и программа запущена автоматически, но мы заметили, что плата больше не будет отображаться как последовательное устройство. Это потому, что нам нужно получить доступ к последовательной консоли через контакты UART Raspberry Pi Pico W с контактом 1 Tx, контактом 2 Rx и контактом 3 GND. Поэтому мы припаяли короткий разъем к соответствующим контактам на Raspberry Pi Pico W и использовали плату USB-TTL, подключенную к нашему ноутбуку, но если вы программируете плату Pico W с помощью Raspberry Pi SBC, вы можете вместо этого использовать UART из 40-контактного разъема GPIO

Теперь мы можем использовать BootTerm и видеть CNX_Software_Xiaomi SSID и правильно обнаруженный скрытый SSID нашего маршрутизатора:

Таким образом, сканирование работает (хотя оно показывает один и тот же SSID несколько раз), и теперь мы можем попытаться подключиться к нашему WiFi-маршрутизатору, используя следующий пример (из документации Pico W) в wifi_connect/wifi_connect.c :

Просто убедитесь, что вы изменили значения ssid и pass, а также страну (CYW43_COUNTRY_??). Нам также понадобится файл CMakeLists.txt :


А также потребуется скопировать некоторые дополнительные файлы в ваш рабочий каталог:

Теперь у вас должно быть четыре файла в папке:

Теперь мы можем построить программу, как мы делали это раньше:

Если на этапе cmake возникла какая-либо проблема, просто исправьте файл CMakeLists.txt и удалите все файлы в папке сборки перед повторным запуском команды cmake.

Поскольку мы находимся в Таиланде, мы сначала предположили, что подойдет CYW43_COUNTRY_TH. Но, увы, это не верно!:

Доступные страны можно найти в pico-sdk/lib/cyw43-driver/src/cyw43_country.h. Вот выдержка:

Вместо этого нам стоит использовать CYW43_COUNTRY_THAILAND, и сборка может быть завершена. У нас есть необходимый файл UF2:

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

Это мало о чем нам говорит, но, по крайней мере, программа работает без ошибок. Работа на C с Raspberry Pi Pico W потребует некоторой работы как с точки зрения изучения нового низкоуровневого API CYW43, библиотеки LWiP, так и с точки зрения работы с FreeRTOS для более сложных примеров.

Нет примера запуска веб-страницы для управления светодиодом, поэтому давайте рассмотрим пример iperf. Перейдем в папку /pico-examples/build/pico_w/iperf и соберем образец:

В этом случае у нас есть два файла UF2:

Если мы посмотрим на код, он выбирается через PICO_CYW43_ARCH_POLL:

  1. PICO_CYW43_ARCH_POLL = 1 — если вы используете pico_cyw43_arch_poll, то вы должны периодически проводить опрос из вашего основного цикла (не из таймера), чтобы проверить наличие драйвера WiFi или работу LwIP, которую необходимо выполнить.
  2. PICO_CYW43_ARCH_POLL != 1 — если вы не используете pico_cyw43_arch_poll, то работа драйвера WiFI и lwIP осуществляется через прерывание в фоновом режиме. Этот сон всего лишь пример некоторых (блокирующих).

Это всего лишь два разных метода программирования для выполнения программы с использованием опроса или прерывания. Последний обычно более эффективен, но более сложен. Мы просто скопируем picow_iperf_server_background.uf2 на плату для тестирования. Обратите внимание, что реализация основана на iperf2, а не на iperf3, как в примере с MicroPython. Сервер iperf работает на Raspberry Pi Pico W:

Запустим клиент iperf на ноутбуке:

8 Мбит/с, что немного лучше, чем с MicroPython, но примерно на том же уровне. Результат также показан в последовательной консоли Pico W:

Если вы хотите запустить пример iperf в качестве клиента на Pico W, вам нужно будет добавить следующие две строки:

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

Завершим руководство по WiFi демонстрацией точки доступа для Raspberry Pi Pico W. Прежде чем создавать пример, взглянем на код в pico-examples/pico_w/access_point/picow_access_point.c:

Эта часть находится в функции main(). Мы видим, что по умолчанию SSID (точка доступа name0 — picow_test, пароль — password (с безопасностью WPA2), подсеть будет 192.168.4.0, и программа также запустит DHCP-сервер, чтобы клиент мог получить IP-адрес. адрес. Если вы установите пароль на NULL, это должна стать открытая сеть. Давайте изменим ap_name на picow_cnxsoft, а пароль на 123456…

Создадим образец и скопируем picow_access_point_poll.uf2 или picow_access_point_background.uf2 на плату, как обычно. Вот вывод из терминала:

Сервер на порту 80 — это не веб-сервер, а базовый TCP-сервер, который, как мы полагаем, предназначен для работы с образцом TCP-клиента, установленным на другом Raspberry Pi Pico.

Тем не менее, нам удалось подключить наш телефон к точке доступа picow_cnxsoft…

а также ноутбук Ubuntu

Оба устройства также отображаются в последовательном терминале Raspberry Pi Pico W:

Документация Raspberry Pi Pico W довольно хороша для начала работы с WiFi, но не полная, так как, например, в настоящее время нет примера для настройки точки доступа в MicroPython и будьте готовы изучить код, например, нам пришлось заглянуть в код C/C++ SDK, а не в документацию, чтобы найти настройки страны. Большинству людей, вероятно, следует начать с MicroPython, так как, хотя C/C++ SDK более гибкий.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

5 1 vote
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

1 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
CrazyIT
1 год назад

Это всё можно сделать на плате за $2.