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

Raspberry Pi Pico W подключен к ADXL343

Одно из лучших применений для 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).


# Set country to avoid possible errors
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# If you need to disable powersaving mode
# wlan.config(pm = 0xa11140)

# See the MAC address in the wireless chip OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)

# Other things to query
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# Load login data from different file for safety reasons
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('Connected')
    status = wlan.ifconfig()
    print('ip = ' + status[0])

Если произошла ошибка, светодиод будет мигать в зависимости от значения кода ошибки.

Значения ошибок

  • 0 = Связь отключена
  • 1 = Соединение ссылок
  • 2 = Link NoIp
  • 3 = Подключение
  • -1 = Отказ связи
  • -2 = Связь NoNet
  • -3 = Link BadAuth

Подключите Pico W к ADXL343

Эта строка инициализирует объект I2C:

# Initialize I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)

Затем эти две линии создают акселерометр и включают функцию обнаружения касаний (для чтения кубиков).

# Create Accelerometer object
accelerometer = 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('Client connected from', 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()
main.py заменяет значения текущими показаниями при подключении к серверу Pico W.

Как вы можете видеть, он заменяет AccX, AccY и AccZ данными с вашего датчика.

Если по датчику постучали, то он выведет случайное целое число от 1 до 6 в строку "DiceVal" на HTML-странице.

Что дальше?

В этом учебнике представлен один простой способ передачи данных с датчиков на веб-страницу.

Фактически, это код, который можно использовать и для других датчиков.

Методология остается прежней. Вам нужно найти правильные библиотеки для ваших датчиков, затем изменить main.py и index.html так, чтобы они могли получать данные датчиков и передавать правильные значения на веб-страницу.

Есть много других проектов, которые вы можете начать, например, проект датчика температуры и влажности с DHT22 или BME688, или датчик яркости со световым резистором.

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

  1. Ken Anderson Июль 15, 2022 в 7:24 дп

    Конечно, было бы неплохо использовать возможности HTML5, чтобы мы могли увидеть, как работает HTML5

  2. Terry Young Сентябрь 24, 2022 в 6:47 пп

    Могут ли данные просто передаваться в виде строки через порт TCP/UDP, а не в формате веб-страницы, чтобы их мог прочитать другой компьютер (для создания датчиков или чего-то подобного?).
    что-то вроде
    192.168.1.24:9060
    AccX, 7.923, AccY, 1.093, AccZ, -5.452
    AccX, 6.423, AccY, 1.241, AccZ, -8.769

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