Сегодня в обзоре будем рассмотрен комплект прототипов датчиков SenseCAP K1100 и руководство по началу работы. В первой части этого руководства описывается комплект и показано, как запрограммировать его с помощью Arduino для передачи данных датчика на шлюз LoRAWAN и отображения их на терминале Wio перед обработкой данных в частной сети LoRaWAN с использованием инструментов с открытым исходным кодом, таких как Grafana. Вторая часть, которая будет опубликована позже, продемонстрирует возможности комплекта для искусственного интеллекта.
В цифровую эпоху, когда IoT и большие данные более распространены, требуется собирать большой объем данных с помощью датчиков. Чтобы обеспечить цифровую трансформацию, SenseCAP K1100 от SeeedStudio поставляется со всеми необходимыми датчиками и оборудованием, включая терминал Wio, датчик AI Vision и модуль LoRaWAN. С помощью этой платформы plug-and-play производители могут легко создавать датчики для сбора данных и решать реальные задачи.
Давайте сначала определим некоторые термины:
IoT – означает «Интернет вещей» и относится к сети устройств, подключенных к Интернету. Позволяет нам контролировать использование различных устройств через Интернет, таких как включение и выключение устройств, электроприборов, автомобилей, мобильных телефонов, средств связи, сельскохозяйственной техники, зданий, домов и даже бытовой техники, которую мы используем ежедневно.
LoRaWAN — это аббревиатура от «Long Range Wide Area Network», технологии радиосвязи, основанной на протоколе LoRa, предназначенной для связи на большие расстояния со сверхнизким энергопотреблением. Становится все более популярным среди разработчиков IoT, например, для подключения интеллектуальных устройств.
SenseCAP K1100 – разработанный Seeed Studio, это компактный набор прототипов датчиков с LoRaWAN и AI, призванный помочь разработчикам и производителям создавать прототипы IoT. Терминал Wio поддерживает только беспроводную связь Wi-Fi и Bluetooth, но подключение LoRaWAN можно добавить с помощью модуля Grove LoRa-E5, входящего в этот комплект. В этом обзоре мы сосредоточимся на сборе данных датчиков через частную сеть LoRaWAN.
Содержимое комплекта SenseCAP K1100
Wio Terminal, совместимый с Arduino HMI-контроллер с Wi-Fi и Bluetooth.
Технические характеристики терминала Wio:
- MCU — Microchip ATSAMD51P19 Arm Cortex-M4F, работающий на частоте 120 МГц
- Wi-Fi и Bluetooth — микроконтроллер Realtek RTL8720DN Arm Cortex-M4 с двухдиапазонным (2,4 ГГц и 5 ГГц) WiFi.
- GPIO — 40 контактов, то же положение контактов, что и у Raspberry Pi
- Встроенные датчики и функции
- Встроенный 3-осевой цифровой акселерометр (LIS3DHTR)
- Световой датчик
- Микрофон и зуммер
- ИК-излучатель
- 2,4-дюймовый ЖК-экран
- Поддержка TinyML (ИИ и машинное обучение)
Модули входящие в комплект:
- модуль LoRa-E5 LoRaWAN на базе микроконтроллера STM32WLE5JC; RF-мощность: +20,8 дБм, поддерживает диапазоны частот EU868/US915/AU915/AS923/KR920.
- Модуль датчика температуры и влажности SHT40
- Модуль SGP30, действующий как датчик качества воздуха (датчик VOC и eCO2)
- Модуль влажности почвы
- Модуль Vision AI с камерой
Принцип работы датчиков SenseCAP K1100
Датчик света использует фотоэлектрический элемент в качестве чувствительного элемента. Он преобразует изменения измеряемого света в электрический сигнал.
Датчик температуры основан на методе термопары. Он состоит из 2х металлических проводов, образующих электрическое соединение. Термопара создает зависящее от температуры напряжение в результате эффекта Зеебека, и это напряжение можно интерпретировать как измерение температуры.
Датчик относительной влажности измеряет влажность через полиаминовую пленку или ацетатный полимер. Когда пленка поглощает или теряет воду, диэлектрическая проницаемость между двумя электродами изменяется, а емкость может быть записана и преобразована в электрические сигналы.
Начало работы с SenseCAP K1100
Требования
Нам потребуется следующее, чтобы измерить данные об окружающей среде и отправить их в нашу частную сеть LoRaWAN:
- Wio-терминал
- Кабель USB Type-C
- Модуль LoRa-E5
- Модуль SHT40
- Главный компьютер
- Шлюз LoRaWAN
- Облачная платформа LoRaWAN
Аппаратное соединение
Попробуем использовать SenseCAP K1100, подключив модуль датчика SHT40 для измерения температуры и относительной влажности воздуха, а также световых и звуковых значений от встроенного в Wio Terminal датчика и микрофона, затем подключив плату к LoRaWAN-шлюзу с помощью модуля LoRa-Е5.
Мы также будем использовать многоканальный шлюз LoRaWAN Dragino LG308 -AS923-TH-EC25 с интернет-соединением 4G LTE.
Установка программного обеспечения и инструкции
Вот шаг, который нужно выполнить для части программного обеспечения
- Установите среду разработки Arduino.
- Добавьте файл платы, необходимый для Wio Terminal. В верхнем меню Arduino выберите File -> Preferences и скопируйте/вставьте https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json в поле URL-адреса менеджера дополнительных плат:
3. Нажмите Tools -> Board -> Board Manager и найдите Wio Terminal.
4. Теперь перейдите в Tools -> Board и выберите плату Seeeduino Wio Terminal.
5. Добавьте библиотеку Arduino для датчика температуры и влажности SHT40. Загрузите файл arduino-i2c-sht4x.zip, затем перейдите в Sketch -> Include Library -> Add .ZIP Library и выберите arduino-i2c-sht4x.
6. Таким же образом добавьте библиотеку LoRa-E5 Arduino после загрузки Disk91_LoRaE5.zip.
7. Добавьте библиотеку Seeed Arduino LCD в Seeed_Arduino_LCD.zip.
8. Затем мы изменили код образца LoRa-SHT40-TFT.ino, чтобы адаптировать его к нашей среде и отобразить информацию на дисплее терминала Wio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
// LoRaWAN + SHT40 + Light + Microphone + TFT LCD // by.. Ninephon kongangkab <ninephon9@gmail.com> #include <SoftwareSerial.h> #include <Arduino.h> #include <SensirionI2CSht4x.h> //SHT40 library #include <Wire.h> #include "TFT_eSPI.h" //TFT LCD library TFT_eSPI tft; //Initializing TFT LCD TFT_eSprite spr = TFT_eSprite(&tft); //Initializing buffer SoftwareSerial mySerial(A0, A1); // RX, TX SensirionI2CSht4x sht4x; static char recv_buf[512]; static bool is_exist = false; static bool is_join = false; static int at_send_check_response(char *p_ack, int timeout_ms, char *p_cmd, ...) { int ch; int num = 0; int index = 0; int startMillis = 0; va_list args; memset(recv_buf, 0, sizeof(recv_buf)); va_start(args, p_cmd); mySerial.printf(p_cmd, args); Serial.printf(p_cmd, args); va_end(args); delay(200); startMillis = millis(); if (p_ack == NULL) { return 0; } do { while (mySerial.available() > 0) { ch = mySerial.read(); recv_buf[index++] = ch; Serial.print((char)ch); delay(2); } if (strstr(recv_buf, p_ack) != NULL) { return 1; } } while (millis() - startMillis < timeout_ms); return 0; } static void recv_prase(char *p_msg) { if (p_msg == NULL) { return; } char *p_start = NULL; int data = 0; int rssi = 0; int snr = 0; p_start = strstr(p_msg, "RX"); if (p_start && (1 == sscanf(p_start, "RX: \"%d\"\r\n", &data))) { Serial.println(data); } p_start = strstr(p_msg, "RSSI"); if (p_start && (1 == sscanf(p_start, "RSSI %d,", &rssi))) { Serial.println(rssi); } p_start = strstr(p_msg, "SNR"); if (p_start && (1 == sscanf(p_start, "SNR %d", &snr))) { Serial.println(snr); } } void setup(void) { Serial.begin(115200); mySerial.begin(9600); Wire.begin(); tft.begin(); //Start TFT LCD tft.setRotation(3); //Set TFT LCD rotation spr.createSprite(TFT_HEIGHT, TFT_WIDTH); //Create buffer pinMode(WIO_LIGHT, INPUT); //Set light sensor pin as INPUT pinMode(WIO_MIC, INPUT); //Set Microphone sensor pin as INPUT uint16_t error; char errorMessage[256]; sht4x.begin(Wire); uint32_t serialNumber; error = sht4x.serialNumber(serialNumber); delay(5000); if (error) { Serial.print("Error trying to execute serialNumber(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } else { Serial.print("Serial Number: "); Serial.println(serialNumber); } Serial.print("E5 LORAWAN TEST\r\n"); if (at_send_check_response("+AT: OK", 100, "AT\r\n")) { is_exist = true; at_send_check_response("+ID: DevEui", 1000, "AT+ID=DevEui,\"xxxxxxxxxxxxxxxx\"\r\n"); at_send_check_response("+ID: AppEui", 1000, "AT+ID=AppEui,\"xxxxxxxxxxxxxxxx\"\r\n"); at_send_check_response("+MODE: LWOTAA", 1000, "AT+MODE=LWOTAA\r\n"); at_send_check_response("+DR: AS923", 1000, "AT+DR=AS923\r\n"); at_send_check_response("+CH: NUM", 1000, "AT+CH=NUM,0-2\r\n"); at_send_check_response("+KEY: APPKEY", 1000, "AT+KEY=APPKEY,\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\r\n"); at_send_check_response("+CLASS: A", 1000, "AT+CLASS=A\r\n"); at_send_check_response("+PORT: 8", 1000, "AT+PORT=8\r\n"); delay(200); is_join = true; } else { is_exist = false; Serial.print("No E5 module found.\r\n"); } } void loop(void) { uint16_t error; float temperature, humidity; int int_temp, int_humi; error = sht4x.measureHighPrecision(temperature, humidity); int_temp = temperature * 100; int_humi = humidity * 100; int light = analogRead(WIO_LIGHT); //Assign variable to store light sensor values int mic = (analogRead(WIO_MIC))/10; //Assign variable to store microphone sensor values //Setting the title header spr.fillSprite(TFT_WHITE); //Fill background with white color spr.fillRect(0, 0, 320, 50, TFT_DARKGREEN); //Rectangle fill with dark green spr.setTextColor(TFT_WHITE); //Setting text color spr.setTextSize(3); //Setting text size spr.drawString("CNX Software", 50, 15); //Drawing a text string spr.drawFastVLine(150, 50, 190, TFT_DARKGREEN); //Drawing verticle line spr.drawFastHLine(0, 140, 320, TFT_DARKGREEN); //Drawing horizontal line //Setting Temperature spr.setTextColor(TFT_BLACK); spr.setTextSize(2); spr.drawString("Temperature", 10, 65); spr.setTextSize(3); spr.drawNumber(temperature, 50, 95); //Display Temperature values spr.drawString("C", 90, 95); //Setting Humidity spr.setTextSize(2); spr.drawString("Humidity", 25, 160); spr.setTextSize(3); spr.drawNumber(humidity, 30, 190); //Display Humidity values spr.drawString("%RH", 70, 190); //Setting Microphone spr.setTextSize(2); spr.drawString("Microphone", 180, 65); spr.setTextSize(3); spr.drawNumber(mic, 205, 95); //Display microphone values spr.drawString("dB", 245, 95); //Setting light spr.setTextSize(2); spr.drawString("Light", 200, 160); spr.setTextSize(3); light = map(light, 0, 1023, 0, 100); //Map sensor values spr.drawNumber(light, 205, 190); //Display sensor values as percentage spr.drawString("%", 245, 190); spr.pushSprite(0, 0); //Push to LCD if (is_exist) { int ret = 0; if (is_join) { ret = at_send_check_response("+JOIN: Network joined", 12000, "AT+JOIN\r\n"); if (ret) { is_join = false; } else { Serial.println(""); Serial.print("JOIN failed!\r\n\r\n"); delay(5000); } } else { char cmd[128]; sprintf(cmd, "AT+CMSGHEX=\"%04X %04X %04X %04X\"\r\n", int_temp, int_humi, light, mic); ret = at_send_check_response("Done", 10000, cmd); if (ret) { Serial.print("Temperature: "); Serial.print(temperature); Serial.println(); Serial.print("Humidity: "); Serial.println(humidity); Serial.print("Light: "); Serial.println(light); Serial.print("Microphone: "); Serial.println(mic); recv_prase(recv_buf); } else { Serial.print("Send failed!\r\n\r\n"); } delay(5000); } } else { delay(1000); } } |
9. Вам также потребуется отредактировать программу, чтобы установить необходимую информацию для платы LoRaWAN следующим образом:
- Номер DevEUI (8 байт)
- Номер AppEUI (8 байт)
- Номер APPKEY (16 байт)
- Настроить OTAA-соединение
- Укажите рабочую полосу частот. Например, это AS923, в Таиланде это AS923.
10. Загрузите программу на плату Wio Terminal. Одним из преимуществ этой платы является то, что она автоматически переходит в режим загрузчика, и нам не нужно нажимать какие-либо кнопки.
11. Откройте Serial Monitor, чтобы проверить вывод программы. Если все работает должным образом, он покажет, где соединение LoRaWAN успешно, и значения с датчиков, например: Температура = 25,46 градуса, Влажность = 58,39%, Освещенность = 7% и Микрофон = 55 дБ .
12. Мы также можем проверить данные датчика, отображаемые на контроллере терминала Wio.
После того, как плата терминала Wio считывает значение с датчика, оно повторно кодируется в формате AES-128 (расширенный стандарт шифрования) и передается по беспроводной сети через модуль LoRa-E5. Если он находится в пределах досягаемости шлюза LoRaWAN, данные будут перенаправлены в сеть LoRaWAN, и мы вскоре рассмотрим это. А пока вот короткая демонстрационная видеозапись обновления данных на дисплее.
Небольшая заминка при программировании Wio Terminal
В какой-то момент у нас возникла проблема во время обзора, когда мы пытались прошить программу на Wio Terminal через Arduino IDE. Часть загрузки застряла бы навсегда…
… потому что компьютер не распознал терминал Wio с ошибкой «неизвестное USB-устройство (сбой запроса дескриптора устройства)», как показано на рисунке ниже.
Несмотря на то, что мы много раз пытались перезагрузить плату и войти в загрузчик вручную, нам не удалось попробовать метод, показанный на иллюстрации ниже.
Поэтому мы решили связаться с Seeed Studio, чтобы компания помогла нам с проблемой, но их техподдержка просто дала тот же ответ. Оказывается, ключевые слова «дважды очень быстро», и изначально мы дважды нажимали кнопку, относительно быстро, но недостаточно. Сдвинув переключатель несколько раз, мы снова смогли использовать терминал Wio. (Мы не смогли сосчитать, сколько раз мы пытались!). Это означает, что компьютер снова видит USB-порт, и мы можем продолжить обзор, пока все работает нормально. Важным выводом является то, что если плата зависает, вам нужно войти в режим Bootloader вручную.
Частная локальная платформа LoRaWAN IoT
Теперь, когда мы получили данные из комплекта SenseCAP K1100, отправленные на наш шлюз, мы обработаем их через частную платформу LoRaWAN IoT, которую мы установили для личного использования. Он основан на различных компонентах программного обеспечения с открытым исходным кодом, как описано ниже:
- Сеть LoRaWAN с открытым исходным кодом и сервер приложений ChirpStack, который регистрирует номер устройства LoRaWAN IoT и расшифровывает полученные данные в формате AES128 через брокера MQTT (транспорт телеметрии очереди сообщений), выступающего в качестве отправителя (публикации).
- Потоковый инструмент разработки Node-RED для программирования. Является получателем (подписчиком) от ChirpStack по протоколу MQTT и берет данные из полезной нагрузки и декодирует их по формату BASE64. Он будет хранить данные датчиков в базе данных InfluxDB, а также проверять и настраивать параметры уведомлений в приложении LINE Notify.
- InfluxDB — это база данных временных рядов с открытым исходным кодом, которая хранит данные датчиков и шлюза LoRaWAN и автоматически сортирует их по временным рядам, что позволяет нам анализировать данные за любой период времени.
- Мы также используем панель инструментов Grafana в реальном времени для визуализации данных из базы данных InfluxDB.
- LINE Notify: Когда датчик выше или ниже указанного значения, приложение обмена сообщениями LINE уведомит нас через LINE Notify API только один раз, то есть не будет уведомления о повторяющихся значениях.
Заключительные слова: для кого подходит SenseCAP K1100?
Набор прототипов датчиков SenseCAP K1100 подходит для школьников, студентов и экспериментаторов (создателей), которые хотят создавать прототипы с различными датчиками, писать код (Arduino) и тестировать подтверждение концепции (PoC) с использованием беспроводного соединения LoRaWAN. Однако для более практических применений более подходящими и надежными являются датчики промышленного класса. Они также доступны от Seeed Studio и других поставщиков.
Нам хотелось бы поблагодарить Seeed Studio за отправку набора прототипов датчика SenseCAP K1100 для этого обзора. Он доступен за 99,00 $ плюс доставка. Во второй части обзора мы будем использовать модуль Grove Vision AI для обучения моделей распознаванию лиц.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.