Одразу хочеться нагадати, що основною метою випуску цієї серії статей про продукцію Raspberry Pi є саме ознайомлення початківців з можливостями мікрокомп'ютерів Raspberry Pi Model B та мікроконтролерів Raspberry 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 дозволяють легко спілкуватися між комп’ютерами та Інтернетом. Доречі, ця технологія допомогла розпочати революцію Інтернету речей (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, підключення потрібно прийняти. Після цього дані, які надсилаються з вашого веб-браузера, мають бути виконані певними фрагментами (у цьому випадку 1024 байти). Ви також повинні знати, який запит робить ваш веб-браузер — він запитує лише просту сторінку? Він запитує сторінку, якої не існує?

 

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 та ваших знань з ойого керування!