Передача данных датчиков по WiFi с помощью Raspberry Pi Pico W

Одно из лучших применений для Raspberry Pi Pico W - его способность обслуживать веб-страницы.
Это означает, что вы можете использовать его для мониторинга данных датчиков с вашего телефона, если вы находитесь в зоне действия WiFi.
Этот проект обеспечит простую основу того, как можно отслеживать данные об ускорении, а также создаст цифровой кубик, который активируется при касании датчика ADXL343.
Видео
Необходимые детали
- Хлебная доска
- Провода перемычки
Что такое ADXL343?
ADXL343 компании Analog Devices является продолжением своего предшественника ADXL345.
Датчик может измерять по трем осям и имеет четыре настройки чувствительности: +-2g, +-4g, +-8g или +-16g. Более низкий диапазон дает большее разрешение для медленных движений, более высокий диапазон хорош для высокоскоростного отслеживания.
ADXL343 также имеет библиотеку CircuitPython, которую мы можем использовать в MicroPython, что значительно облегчает начало работы.
Для выполнения этого проекта вам понадобятся выводы, припаянные к ADXL343, а также Pico W.
Подключение ADXL343 к Pico W
К Raspberry Pi необходимо подключить четыре контакта.
Подключите VIN штырь к Выход 3,3 В на вашем Raspberry Pi Pico W;
Подключите GND к контакту заземления на вашем Pico W;
Подключите SDA контакт с GPIO0;
Подключите SCL контакт с GPIO1.
Прошивка прошивки MicroPython для Raspberry Pi Pico W

Во-первых, вам нужно прошить прошивку MicroPython на Pico W, если вы этого еще не сделали.
Затем нажмите и удерживайте кнопку BOOTSEL и подключите Pico к компьютеру. Должен появиться новый диск. Скопируйте загруженный файл .UF2 на этот диск.
Настройка Thonny для Raspberry Pi Pico W
Откройте программу Thonny. Если вы еще не скачали его, получите его здесь.
Установите интерпретатор на MicroPython (Raspberry Pi Pico) в левой нижней части окна Thonny IDE.
Копирование библиотек на Pico W

Загрузите библиотеки и файлы из нашего репозитория на Github.
Вы можете загрузить ZIP-файл, перейдя по этой ссылке и нажав на зеленую кнопку "Код" и нажмите кнопку Скачать ZIP.
После загрузки распакуйте его в удобное для вас место.
Затем в IDE Thonny нажмите на кнопку Вид > Файлы чтобы увидеть вашу файловую систему и файловую систему Pico W.
Перейдите к распакованным файлам и зайдите в папку MicroPython > II Pico W Сенсорный сервер. Скопируйте все на Pico W, щелкнув правой кнопкой мыши на каждом элементе и нажав "Upload to /".
Изменение кода
Для того чтобы заставить Raspberry Pi Pico подключиться к вашей сети WiFi, вам необходимо открыть secrets.py и изменить ssid и pw'значение. Введите SSID (имя) вашей сети в первое значение и пароль во второе. Сохраните файл.
Сайт index.html это веб-страница, которая будет обслуживаться. Строка "<p>X AccX | Y AccY | Z AccZ</p>" и <p>Результат DiceVal</p> будут заменены данными датчиков при запуске проекта.
Подключите Raspberry Pi Pico к WiFi
Сайт main.py это место, где происходит действие.
Эти строки подключают его к вашему WiFi. Не забудьте изменить строку в rp2.country если ваша страна не Германия (DE).
# Установите страну, чтобы избежать возможных ошибок
rp2.country('DE')
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Если необходимо отключить режим энергосбережения
# wlan.config(pm = 0xa11140)
# Узнайте MAC-адрес в OTP беспроводного чипа
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)
# Другие запросы
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))
# Загрузите данные для входа в систему из другого файла в целях безопасности
ssid = secrets['ssid']
pw = secrets['pw']
wlan.connect(ssid, pw)
Благодаря этим строкам кода встроенный светодиод будет мигать три раза, если соединение WiFi было успешным. Он также выведет сообщение и ваш IP-адрес, который можно просмотреть в Thonny. Этот IP-адрес пригодится для последующего доступа к серверу.
led = machine.Pin('LED', machine.Pin.OUT)
for i in range(wlan.status()):
led.on()
time.sleep(0.2)
led.off()
time.sleep(0.2)
print('Подключен')
status = wlan.ifconfig()
print('ip = ' + status[0])
Если произошла ошибка, светодиод будет мигать в зависимости от значения кода ошибки.
Значения ошибок
- 0 = Связь отключена
- 1 = Соединение ссылок
- 2 = Link NoIp
- 3 = Подключение
- -1 = Отказ связи
- -2 = Связь NoNet
- -3 = Link BadAuth
Подключите Pico W к ADXL343
Эта строка инициализирует объект I2C:
# Инициализация I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)
Затем эти две линии создают акселерометр и включают функцию обнаружения касаний (для чтения кубиков).
# Создайте объект акселерометра
акселерометр = adafruit_adxl34x.ADXL343(i2c)
accelerometer.enable_tap_detection()
Время выполнения кода
Чтобы запустить код, нажмите кнопку Run в Thonny - это кнопка с иконкой воспроизведения в зеленой кнопке на верхней панели инструментов.
Затем подключитесь к IP-адресу вашего Raspberry Pi Pico W. Если у вас открыта оболочка Thonny, вы можете посмотреть его там. Или же вы можете войти в свой маршрутизатор и узнать IP-адрес Pico W.
Pico W запускает HTTP-сервер с сокетным соединением и прослушивает соединения, определенные здесь:
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
Когда вы подключитесь к IP-адресу вашего Pico W, он запустит этот код, который будет обновлять index.html с последними данными каждую секунду.
cl, addr = s.accept()
print('Клиент подключен с', addr)
cl_file = cl.makefile('rwb', 0)
while True:
line = cl_file.readline()
if not line or line == b'\r\n':
break
response = get_html('index.html')
data = accelerometer.acceleration
tapped = accelerometer.events['tap']
response = response.replace('AccX', str(data[0]))
response = response.replace('AccY', str(data[1]))
response = response.replace('AccZ', str(data[2]))
if tapped:
dice_val = str(random.randint(1,6))
response = response.replace('DiceVal', dice_val)
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()

Как вы можете видеть, он заменяет AccX, AccY и AccZ данными с вашего датчика.
Если по датчику постучали, то он выведет случайное целое число от 1 до 6 в строку "DiceVal" на HTML-странице.
Что дальше?
В этом учебнике представлен один простой способ передачи данных с датчиков на веб-страницу.
Фактически, это код, который можно использовать и для других датчиков.
Методология остается прежней. Вам нужно найти правильные библиотеки для ваших датчиков, затем изменить main.py и index.html так, чтобы они могли получать данные датчиков и передавать правильные значения на веб-страницу.
Есть много других проектов, которые вы можете начать, например, проект датчика температуры и влажности с DHT22 или BME688, или датчик яркости со световым резистором.
Конечно, было бы неплохо использовать возможности HTML5, чтобы мы могли увидеть, как работает HTML5