Оглавление:
- Шаг 1. Подключите NodeMCU к Wi-Fi
- Шаг 2: запрос данных по HTTPS с ANWB.nl
- Шаг 3. Превратите данные в полезную информацию
- Шаг 4: Установите триггер
- Шаг 5: обратная связь с дизайном
- Шаг 6: запустите код
Видео: Проверка отчета о трафике (NL) с ковриком: 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
В этом руководстве я опишу, как построить дверной коврик, который будет проверять отчеты о дорожном движении на голландских автомагистралях. Как только вы выйдете на коврик и на вашем маршруте возникнет пробка, коврик станет красного цвета. Когда пробок нет, коврик станет зеленым.
Я буду работать над NodeMCU 1.0 (модуль ESP0-12E). Код этого проекта может работать и на других устройствах (например, на платах Arduino). Этот проект основан на голландском источнике сообщений о дорожном движении - ANWB.
Что нам понадобится для этого проекта:
- NodeMCU - Перемычки - Светодиодная подсветка или полоса - Аналоговый датчик (алюминиевая фольга, губка) - Подключение Wi-Fi - Коврик
Шаги, которые мы должны предпринять:
1. Подключите NodeMCu к Wi-Fi 2. Запросите данные через HTTPS с ANWB.nl 3. Превратите данные в полезную информацию 4. Установите триггер 5. Обратная связь по проекту
Шаг 1. Подключите NodeMCU к Wi-Fi
Этот шаг покажет, как выполнить успешный HTTPSRequest, чтобы узнать, подключено ли устройство к Интернету.
Сначала установите библиотеку ESP8266 в Arduino IDE. Откройте из примеров ESP8266>
Введите свои учетные данные Wi-Fi в верхней части кода, как показано ниже:
const char * ssid = "ВАШ_SSID";
const char * пароль = "ВАШ ПАСС";
Загрузите код на свое устройство и проверьте, подключается ли NodeMCU к Интернету. В примере HTTPSRequest по умолчанию используется Github для получения информации. После успешного выполнения HTTPSRequest вы получаете данные Github в последовательном мониторе.
Шаг 2: запрос данных по HTTPS с ANWB.nl
На этом втором этапе вы меняете источник данных со значения по умолчанию на источник, необходимый для этого проекта: ANWB.nl.
В верхней части кода измените char * host на www.anwb.nl (или другой источник, из которого вы хотите получить свои данные):
const char * host = "www.anwb.nl";!! Если вы используете другой источник, шаг 3 будет отличаться от моего кода. Шаг 3 требует специального кода для извлечения полезной информации!
Затем измените строковый URL в настройке функции на "/ feeds / gethf", путь, откуда берется информация:
Строка url = "/ feeds / gethf";!! Если вы используете другой источник, используйте путь к вашему источнику!
При загрузке кода вы должны получить ответ со всеми данными с www.anwb.nl/feeds/gethf. Этот код сохраняется в строке с именем line.
Шаг 3. Превратите данные в полезную информацию
До сих пор код запускался только при запуске или сбросе NodeMCU, потому что весь код находится в функции настройки. Чтобы настроить триггер на непрерывный запуск кода, необходимо изменить положение кода, выполняющего HTTPS-запрос. Ниже функции цикла вы добавляете еще одну функцию. Я назвал это void extractData:
extractData () {
}
Скопируйте часть кода из функции настройки в extractData (). Начните со следующей строки до конца функции настройки:
если (! client.connect (хост, Код теперь находится в вашей новой функции, поэтому удалите скопированный код из функции настройки.
Затем вызовите функцию extractData в функции цикла и добавьте некоторую задержку, чтобы дать nodeMCU время отдохнуть:
void loop () {
extractData (); задержка (30000); // это будет удалено позже, когда у нас будет аналоговый датчик}
Поскольку данные, которые вы получаете, хранятся в строке, и требуются только части этой строки, вам нужно написать пару циклов for.
Сначала проверьте все позиции слова «дорога». После слова «дорога» следует название дороги (A1, A2 и т. Д.).
Перед тем, как приступить к написанию циклов for, вам нужно объявить некоторые переменные, которые вы собираетесь использовать:
int noOfPos = 0;
логическое hasRunOnce = false; int from = 0; int roadArray [20];
Пришло время написать несколько циклов. Я написал циклы for в нижней части функции extractData. Я пытался разделить его на отдельные функции, но не смог заставить его работать.
Для цикла №1: найдите в строке строки слова «дорога»:
for (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos + = 1; from = pos + 1; если (hasRunOnce == true && pos == line.indexOf ("дорога \": ")) {я = line.length (); } hasRunOnce = true; }
Затем проверьте, на каких дорогах есть пробки, используя положение петли сверху. Положение названия дорог всегда одинаковое и начинается с 7 символов и заканчивается 10 символами после слова «дорога».
Теперь мы определяем массив nameOfRoadArray, который будет заполнен в следующем цикле for:
Строка nameOfRoadArray [20];
Для петли №2: Найдите все названия дорог с входными данными из петли №2. 1
для (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }
Массив nameOfRoudArray должен быть заполнен всеми известными пробками.
Далее вы собираетесь проверить, входит ли ваша дорога в массив дорог с пробками. Выведите nameOfRoadArray, чтобы получить дороги в данных. Сделайте это, добавив Serial.println (nameOfRoadArray [k]); во второй цикл for, например:
для (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }
Если все правильно, в последовательном мониторе будут отображаться все дороги с пробками.
Перед написанием последнего цикла For вы должны объявить логическое значение как глобальную переменную. Логическое значение trafficJam по умолчанию равно false и изменится, если функция extractData вернет true для пробки. Следующий код находится поверх файла.ino:
логическое trafficJam = false;
Для петли № 3: проверьте, находится ли дорога, в данном случае A1, в списке пробок.
for (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// измените A1 на дорогу вашей благосклонности trafficJam = true;}
Если вы печатаете пробку в мониторе последовательного порта, вы знаете, есть пробка на A1 или нет.
Поместите этот код в конец функции extractData:
Serial.println (пробка); // посмотрим, есть ли пробка
С этой информацией мы собираемся продолжить работу над обратной связью системы на шаге 5.
Шаг 4: Установите триггер
Поскольку теперь мы можем успешно извлекать данные из источника, пришло время создать датчик, который будет запускать nodeMCU для запуска функции extractData. Я решил сделать аналоговый датчик из коврика. Вы можете изменить триггер, используя другой датчик.
Создание аналогового датчика
Я использовал 2 куска алюминиевой фольги, две перемычки и губку.
Просверлите отверстие в губке, это место соприкосновения алюминиевой фольги. Приклейте алюминиевую фольгу с двух сторон губки. Подключите перемычки к алюминиевой фольге. Подключите перемычки к nodeMCU. Одна сторона к контакту A0, а другая - к контакту V3. Положите губку под коврик, и вы только что превратили коврик в датчик. Потрясающие!
Код для считывания значения с датчика, чтобы увидеть, стоит ли кто-нибудь на коврике:
int sensorValue = аналоговое чтение (A0);
если (sensorValue == 1024) {extractData (); }
Когда алюминиевая фольга контактирует (когда кто-то стоит на коврике), значение sensorValue равно 1024. Это приводит к срабатыванию функции extractData (). И это именно то, что мы хотим, чтобы система делала.
Шаг 5: обратная связь с дизайном
Я использовал светодиодную полосу для обратной связи с пользователем. Когда есть пробка, световой сигнал становится красным. Когда дорога будет готова, она станет зеленой. Я использовал библиотеку adafruit neopixel для управления своей светодиодной лентой.
Напишите этот код в верхней части файла, чтобы убедиться, что светодиодная полоса определена:
#включают
#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel пикселей = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
Напишите следующий код в функции настройки:
// неопиксель
pixel.begin (); pixel.show ();
И следующий код в функции цикла:
if (trafficJam == true) {
для (int я; я <PIXEL_COUNT; я ++) {пикселей.setPixelColor (я, 255, 0, 0); // красные пиксели.show (); задержка (200); }} else {для (int я; я <PIXEL_COUNT; я ++) {пикселей.setPixelColor (я, 0, 255, 0); // зеленые пиксели.show (); задержка (200); }
В приведенном выше коде есть функция if / else. Когда функция extractData возвращает наличие пробки, светодиодная полоса становится красной. В противном случае светодиодная полоса станет зеленой.
Шаг 6: запустите код
Если мы запустим полный код сейчас, датчик и свет должны работать. Когда вы стоите на коврике, датчик подключается и запускается функция extractData. Когда в массиве названий дорог присутствует искомая дорога, светодиодная полоса станет красной, сигнализируя о пробке. Если его нет в массиве, светодиодная полоса станет зеленой, и вы поймете, что все готово!
Удачного путешествия и спасибо за чтение. Надеюсь, вы нашли вдохновение или информацию. Если у вас есть отзывы, не стесняйтесь отвечать!
Рекомендуемые:
Проверка здравомыслия: 5 шагов (с изображениями)
The Sanity Check: этот проект посвящен вменяемости или регулярной проверке. Лучший способ добиться этого - создать маску, которая случайным образом светится красным цветом. Достаточно часто, чтобы это было заметно, но достаточно редко, чтобы заставить людей сомневаться
AvoRipe - Проверка спелости авокадо: 8 шагов (с изображениями)
AvoRipe - проверка, созрел ли ваш авокадо: такое случилось со всеми, вы покупаете авокадо, он еще не созрел. Проходит несколько дней, и к тому времени, когда оно созревает, вы уже о нем забываете … а через несколько дней он может испортиться! К счастью для вас, мы разработали и построили AvoRipe, устройство, которое проверяет ваше увлечение
Проверка решения класса CPC: 10 шагов
CPC Class Polution Checker: Привет, я студент из Бельгии, и это мой первый большой проект для получения степени бакалавра! Это руководство посвящено тому, как сделать измеритель содержания воздуха в закрытых помещениях, особенно в классах! Я слышал, вы думаете, зачем нужен этот проект? Ну, все так
Проверка дверцы холодильника: 5 шагов
Проверка дверцы холодильника: введение: в наши дни люди «умны»; холодильник, который может показать вам температуру холодильника. В некоторых холодильниках также есть сигнализация, напоминающая пользователю, что дверь не закрыта. Однако не у всех есть такие «умные»
Проверка изображения на цвет и четкость: 8 шагов
Тестирование изображения на цвет и четкость: я сделал это руководство для себя; чтобы улучшить мои Instructables, однако я намерен поделиться тем, что я нашел. Я заметил, что некоторые изображения, которые я загружаю в Instructabes, получаются идеальными, а другие изображения теряют четкость, немного обесцвечиваются или расплывчаты. Не знаю