Монитор погоды MKR FOX 1200
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
![]() |
| |||
![]() |
| |||
![]() |
|
Об этом проекте
Примечание. Это руководство может быть устаревшим, перейдите здесь для более актуальной версии .
В этом проекте показано, как превратить MKR FOX 1200 и набор датчиков I2C в простую метеостанцию с батарейным питанием.
Мы будем использовать:
- встроенный датчик температуры (низкая точность, ± 1 ° C)
- Датчик HTU21D I2C для определения уровня влажности
- Bosch BMP280 для измерения атмосферного давления и точной температуры.
- Датчик освещенности TSL2561 для измерения освещенности.
Настройка оборудования
Аппаратные соединения для этого проекта довольно просты:все датчики используют интерфейсы I2C и работают при напряжении 3,3 В.
Им нужны четыре провода от MKR FOX 1200:GND, 3,3 В, SDA на контакте 11 и SCL на контакте 12. Те же четыре соединения могут использоваться параллельно с тремя датчиками, потому что каждый из них имеет определенный адрес I2C и, следовательно, соответствующие библиотеки и функции позаботятся о различении каждой из них.
Весь проект может питаться от двух щелочных батарей AA или AAA, соединенных последовательно для генерации 3 В и подключенных к клеммной колодке с винтовыми зажимами на плате.
Сообщения Sigfox
Поскольку сеть Sigfox может отправлять не более 140 сообщений в день, мы оптимизируем показания и отправим данные в компактном двоичном формате.
Упаковка данных важна, потому что максимальный размер сообщения, которое вы можете отправить, составляет 12 байтов. Число с плавающей запятой занимает 4 байта, поэтому нам нужно упаковать наши показания в более мелкое представление.
Формат числа с плавающей запятой очень широкий (вы можете представлять числа размером до 3,402823e + 38 (!)), И нам не нужно все пространство данных; затем мы можем определить безопасные пределы (в зависимости от того, где мы собираемся развернуть станцию) и восстановить исходное представление в серверной части.
Конфигурация облачных сервисов
Мы будем использовать два облачных сервиса:
- Серверная часть Sigfox
- Thingspeak
Зарегистрируйте свою доску на бэкэнде Sigfox, используя PAC и идентификатор, предоставленный в примере FirstConfiguration (можно пропустить, если вы уже сделали это для предыдущего проекта).
Оба должны быть настроены так, чтобы разговаривать друг с другом и интерпретировать данные в правильном формате. Зарегистрируйтесь на обоих и создайте пару каналов на Thingspeak. Конфигурация показана на изображении ниже.
Первый канал, который мы настроим, будет тем, который принимает необработанные данные ( readChannelID
), а второй будет собирать масштабированные данные ( writeChannelID
).

Пришло время загрузить эскиз с помощью редактора Arduino Create Editor. Скетч по умолчанию позволяет тщательно протестировать всю инфраструктуру перед развертыванием в полевых условиях.
Не забудьте объявить:
oneshot =false
когда вы уверены, что вся внутренняя инфраструктура настроена правильно. Скетч ждет последовательный порт, поэтому запускать его сейчас не будем. Вместо этого откройте серверную часть SigFox и настройте обратный вызов:
Нажмите ТИП УСТРОЙСТВА . -> СПИСОК -> щелкните правой кнопкой мыши свою доску и выберите Изменить .

Нажмите ОТЗЫВЫ . в меню слева:

Вы увидите такие окна:
Нажмите Создать . кнопка в правом верхнем углу окна:

Выберите Пользовательский обратный вызов .


Соответствующие конфигурации указаны ниже. Убедитесь, что обратный вызов настроен как:
- ТИП:
DATA / UPLINK
- Канал:
URL
- Метод HTTP:
GET
В качестве пользовательской полезной нагрузки установите:
status ::uint:8 temp1 ::int:16:little-endian temp2 ::int:16:little-endian press ::uint:16:little-endian гул ::uint:16:little -endian light ::uint:16:little-endian lastMsg ::uint:8
Это представляет собой структуру, которую мы упаковали в эскиз. Мы назначаем переменную каждому полю, чтобы мы могли ссылаться на них в обратном вызове HTTP.
В качестве шаблона URL установите:
https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData # light} &field6 ={customData # status} &field7 ={customData # lastMsg}
После настройки ваши окна должны быть такими:

Не забудьте изменить ключ API api_key
с тем, который предоставляется Thingspeak как Write API Key
для Channel1
.

Сохранить и выйти. Теперь мы можем открыть последовательный порт и наблюдать за отправкой первого сообщения. Ура!
От Raw к графике
Настроенная нами настройка будет направлять наши данные в серверную часть Thingspeak, но они все еще находятся в необработанном формате; чтобы преобразовать их, давайте воспользуемся инструментом анализа Thingspeak с этим фрагментом
% TODO - замените [] идентификатором канала для чтения данных:readChannelID =[]; % TODO - введите ключ API чтения между "" ниже:readAPIKey ='T6UK7XO6A4H2AGT7'; % TODO - замените [] идентификатором канала для записи данных:writeChannelID =[]; % TODO - введите ключ API записи между "" ниже:writeAPIKey ='XU4TGY261P6B5USN'; %% Прочитать данные %% data =thingSpeakRead (readChannelID, 'ReadKey', readAPIKey, 'OutputFormat', 'table'); проанализированные данные =данные; %% Анализ данных %% INT16_t_MAX =32767; UINT16_t_MAX =65536; проанализированные данные. ('Температура1') =данные. ('Температура1') / INT16_t_MAX * 120; проанализированные данные. ('Температура2') =данные. ('Температура2') / INT16_t_MAX * 120; проанализированные данные. ('Давление') =данные. ('Давление') / UINT16_t_MAX * 200000; AnalysisData. ('Light') =data. ('Light') / UINT16_t_MAX * 100000; проанализированные данные. ('Влажность') =данные. ('Влажность') / UINT16_t_MAX * 110; %% Запись данных %% thingSpeakWrite (writeChannelID, analysisData, 'WriteKey', writeAPIKey); %% Запланировать действие:React -> каждые 10 минут
Заменив идентификаторы каналов с нашими собственными, мы наконец можем преобразовать необработанные данные в фактические значения. Не забудьте запланировать действие анализа каждые 10 минут с помощью React или он никогда не будет выполнен!



Наконец-то у нас есть замечательные графики.


Код
WeatherMonitor
Производственный процесс
- Метеостанция Raspberry Pi
- Weather Monitor
- Создание монитора Ambilight с помощью Arduino
- Мониторинг CO2 с помощью датчика K30
- Монитор сердечного ритма с использованием Интернета вещей
- Погодное окно Arduino + ESP
- Какой ты рост?
- Емкостной датчик отпечатков пальцев с Arduino или ESP8266
- Башня датчика облаков Arduino
- Монитор качества воздуха своими руками с датчиком Sharp GP2Y1010AU0F