Дистанционная метеостанция Raspberry Pi Pico W (на солнечных батареях)

Погодная станция Raspberry Pi Pico W softap

Одна особенность Raspberry Pi Pico W - это функция SoftAP.

SoftAP расшифровывается как точка доступа с программным обеспечением, которая позволяет транслировать WiFi сеть прямо с Raspberry Pi Pico W.

Именно поэтому мы решили реализовать этот проект на солнечных батареях.

Как проект на солнечных батареях пересекается с SoftAP

Вот в чем дело.

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

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

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

Именно здесь на помощь приходит SoftAP. Допустим, вы хотите узнать, какая погода на улице. Вы подключаетесь к SoftAP, который транслирует Raspberry Pi Pico W, а затем заходите на IP-адрес, который отображает данные.

Это практически лучший сценарий того, как мы можем использовать преимущества Raspberry Pi Pico W.

Можно, конечно, купить LTE-дополнение или дополнение для беспроводной связи дальнего радиуса действия, но тогда это уже не будет учебником по Pico W, поскольку эти компоненты можно будет использовать в обычном Pico.

А как насчет Bluetooth на Raspberry Pi Pico W?

Было бы здорово, если бы вы могли использовать Bluetooth, но на момент публикации этого руководства Bluetooth в Raspberry Pi Pico W не включен.

1 июля 2022 года инженер Raspberry Pi и модератор форума jamesh сообщил: "Мы уже начали работу над программным обеспечением для BT, пока что я не могу предложить никакого графика. Программное обеспечение должно быть написано, протестировано и написаны учебники."

Детали

Полный проект с солнечной батареей в нижней части макетной платы
  • Raspberry Pi Pico W
  • Солнечная панель 6 В
  • Модуль зарядки TP4056 USB-C
  • NR18650 Литий-ионный аккумулятор 3,6 В
  • BME688 Breakout Board
  • Держатель аккумулятора для типа 18650
  • Диод Шоттки
  • Разъемы для Pico W и BME688
  • Хлебная доска

Обновление прошивки Raspberry Pi Pico W

Прошивка Raspberry Pi Pico W постоянно развивается, поэтому лучше всего использовать последнюю версию прошивки. Например, первая публичная MicroPython UF2 для Pico W имеет некоторые проблемы с безопасностью, поскольку сети всегда открыты.

Перейдите по этой ссылке, чтобы узнать, как его обновить. По этой ссылке вы также узнаете, как быстро начать вещание собственной сети WiFi.

Солнечная установка

Солнечная панель, питающая Pico W, должна выдавать 6 В и 150 мА, как минимум.

Солнечная панель должна выдавать не менее 6 вольт и 150 мА.

В качестве аккумулятора следует использовать литиевую батарею серии 18650 с номинальным напряжением 3,7 В.

Модуль зарядки TP4056 USB-C

Модуль TP4056 будет защищать батарею и питать Pico W.

Устройство для отслеживания погоды

BME688 breakout board by pi3g.

Для этого проекта мы используем наш Разрывная плата BME688, разработанная в компании.

Вы можете использовать любой погодный датчик, например DHT11 или DHT22, но код и схема подключения в этой статье действительно предназначены для BME688.

Проводка

Установите Pico W и BME688 на макетную плату.

Вам необходимо подключить четыре вывода: 3,3 В, GND, SCL и SDA на BME688.

Вот что мы использовали:

Пико У GP1 соединяется с SCL;

GP0 соединяется с SDA;

GND соединяется с GND;

Эти три штырька должны располагаться в ряд, рядом с разъемом micro-USB.

3V3 соединяется с 3V3, который находится на другой стороне платы.

Модуль зарядки TP4056 USB-C

Вам нужно будет припаять провода к TP4056.

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

Проект солнечной батареи Raspberry Pi Pico W

Штырьки рядом с разъемом USB-C предназначены для подключения внешнего питания, например, нашего солнечного модуля.

Подключите эти контакты к солнечной батарее.

С другой стороны находятся контакты, предназначенные для вывода питания. Выводы, обозначенные как B+ и B-, необходимо подключить к батарее.

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

Диод Шоттки

Подключите диод Шоттки к выводу VSYS микросхемы Pico W.

Убедитесь, что серое кольцо на диоде обращено к Pico W, а другой конец подключен к положительной шине на макетной плате.

Поскольку мы питаем Pico от двух источников питания - USB и от солнечной системы, нам необходимо использовать диод Шоттки.

Диод Шоттки Предотвращает обратное питание и позволяет работать с двумя напряжениями. Подробнее здесь.

Подключите TP4056 к макетной плате

Raspberry Pi Pico W на солнечных батареях в сборе!
Raspberry Pi Pico W на солнечных батареях в сборе!

Подключите положительный вывод TP4056 к положительной шине макетной платы, где расположен диод Шоттки.

Затем подключите отрицательный выход TP4056 к отрицательному выводу Raspberry Pi Pico W.

Код для запуска метеостанции Raspberry Pi Pico W

Мы загрузили весь наш код в наш Репозиторий Github здесь.

Вот руководство по загрузке файлов в Pico W.

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

Тем не менее, вот некоторые вещи, которые вы, возможно, захотите изменить.

bme68x.py

Этот скрипт изменяет вывод BME688.

Чтобы получить точные показания температуры и высоты над уровнем моря, вам нужно изменить эти строки, выделенные жирным шрифтом:

 # change this to match the location's pressure (hPa) at sea level
        # bme68x.sea_level_pressure = 1013.25
       <strong> self.bme68x.sea_level_pressure = 1013</strong>

        # You will usually have to add an offset to account for the temperature of
        # the sensor. This is usually around 5 degrees but varies by use. Use a
        # separate temperature sensor to calibrate this one.
        <strong>self.temperature_offset = -9</strong>

main.py

Файл main.py запускает точку доступа, а также запускает сервер, который доставляет HTML-файл всем, кто подключается.

В HTML-файле вы можете увидеть показания BME688.

Получив соединение (через сокеты), Pico W отправит файл index.html, но перед отправкой заменит некоторые строки на данные, полученные от BME688, с помощью этого блока кода:

data = {
    'T': 0,
    'P': 0,
    'A': 0,
    'H': 0,
    'G': 0,
    }
...
def get_html(html_name):
    with open(html_name, 'r') as file:
        html = file.read()
        
    return html
...
sensor = bme68x.BME68X()
... 
response = get_html('index.html')
    data = sensor.save_data('data.json')
    blink_onboard_led(1, 0.2)
    response = response.replace('id_temp', str(data['T']))
    response = response.replace('id_pres', str(data['P']))
    response = response.replace('id_alti', str(data['A']))
    response = response.replace('id_humi', str(data['H']))
    response = response.replace('id_gas', str(data['G']))
    print_data(data)
    conn.send(response)
    conn.close()

Как вы можете видеть, строка, в которой говорится data = sensor.save_data('data.json') здесь мы получаем данные датчика, а затем код модифицирует HTML-файл с правильными показаниями температуры, давления, высоты над уровнем моря, влажности и газопроводности.

Автоматическое обновление происходит каждые три секунды.

Ниже приведен блок кода, необходимый для трансляции точки доступа на Raspberry Pi Pico W:


essid = 'Pico-W-Weather-Station'
password = '#FreeThePicoW'

ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=essid, password=password)

while ap.active() == False:
    pass

print('Connection successfull')
print(ap.ifconfig())

# Create sensor object
sensor = bme68x.BME68X()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(3)
blink_onboard_led(3, 0.2)

Примечание: если вы используете оригинальную прошивку, вам следует обновить ее, иначе вы не сможете переименовать SSID или обеспечить безопасность беспроводной сети. Мы протестировали эту функцию на ночной сборке от 15 июля 2022 года, и она наконец-то заработала. Есть еще несколько причуд и ошибок, поэтому обязательно прочтите наш обзор здесь.

КЛИКНИТЕ ЗДЕСЬ: Трансляция сети WiFi (точка доступа SoftAP)

Подключение к точке доступа Pico W

После успешной передачи точки доступа ваш Pico W трижды мигнет, введя код.

Подключитесь к точке доступа, которая должна быть названа Станция "Пико-Витер".

Введите пароль #FreeThePicoW

Подключитесь к Pico, используя IP-адрес. Если вы запустили его из Thonny, вы увидите IP-адрес в оболочке.

В противном случае вы можете попробовать 192.168.4.1 так как это чаще всего IP-адрес Pico W, и вы увидите снимок экрана справа:

Вы закончили

В этом проекте вы узнали, как транслировать сеть с помощью функции SoftAP в Raspberry Pi Pico W. Вы также узнали, как подключить солнечную панель и аккумулятор к Pico W.

Если вы хотите узнать больше о Pico W, Почему бы не прочитать нашу мега-статью здесь?

КЛИКНИТЕ ЗДЕСЬ: Все, что вам нужно знать о Raspberry Pi Pico W

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

  1. Carlos Июль 25, 2022 в 8:34 дп

    В характеристиках TP4056 сказано, что входное напряжение должно быть 5,5 или 6 В, солнечная панель на 6 В может выдавать 6 В и, возможно, 7 В+ в некоторых случаях. Я запутался в этом вопросе. Не могли бы вы разъяснить?

    Спасибо!

  2. Bigalbo Июль 28, 2022 в 8:12 дп

    Я сделал этот проект и получил отличные результаты, очень точные показания. Но столкнулся с проблемой, что он работает только в течение 10 - 15 минут, а затем останавливается. Я обнаружил, что если я удалю файл json, то это единственный способ заставить его снова работать.
    Есть ли способ запретить ему хранить их и просто отправлять данные.
    Должен сказать, что это хорошая работа, продолжайте ее, пожалуйста👍

    • Nabla Август 8, 2022 в 1:14 пп

      В файле bme68x.py метод save_data продолжает добавлять строки в файл Jason. В какой-то момент он должен стать слишком большим. Вы можете изменить метод так, чтобы перед сохранением файла сохранялись только последние x строк списка data_list. Вам придется определить идеальное значение x. Вы также можете сохранять только текущее измерение. Таким образом, файл останется достаточно маленьким.

  3. Thomas Сентябрь 6, 2022 в 11:31 дп

    После 4.104 символов 'data.json' заполняет память крошечного пико .-/

    Вопрос в том, как ограничить это, чтобы довести вышеупомянутый проект до функционального завершения?
    Пример / дополнение кода (в качестве обновления) был бы высоко оценен!

    TiA - и продолжайте в том же духе...
    PS: также был опубликован соответствующий выпуск в GitHub Repo.

  4. BigMac Сентябрь 14, 2022 в 6:43 пп

    Использование TP 4056 для такого проекта не является эффективным решением, см:
    https://www.best-microcontroller-projects.com/tp4056.html

    Конструктивный дизайн может быть использован с помощью переключателя MPTT Set Switch, как в Waveshare,
    Описание здесь:
    https://www.waveshare.com/solar-power-manager.htm

    Ура!

  5. Mark Beans Июль 9, 2023 в 9:01 пп

    Отличная идея проекта! Кто-нибудь разработал 3D-печатный корпус для этого и хочет поделиться?

  6. Pavlo Февраль 22, 2024 в 11:32 дп

    Привет,
    Спасибо за руководство.
    В соответствии со спецификацией TP4056 LED-Anzeige Rot: (Ladevorgang), LED-Anzeige Blau: (Standby, Ladevorgang abgeschlossen)
    В моем случае на TP4056 горят оба светодиода, когда солнечная панель находится под прямым светом. Так и должно быть?
    Возможно ли, что батарея может заряжаться от солнечной батареи и одновременно питать Pico?

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