- Необходимые материалы:
- Как работают вещи?
- Программирование ESP8266-01:
- Подключение ESP8266-01 к Arduino:
- Программа и работа Arduino:
ESP8266-01 стал отличным модулем, утолившим нашу жажду проектов IOT. С момента своего выпуска он сформировал сильное сообщество и превратился в простой в использовании, дешевый и мощный модуль Wi-Fi. Еще одна платформа с открытым исходным кодом, которая гораздо более популярна, - это Arduino, на ее основе уже построено множество проектов. Объединение этих двух платформ откроет двери для многих инновационных проектов, поэтому в этом руководстве мы узнаем, как связать модуль ESP8266-01 с Arduino. Таким образом, мы сможем отправлять или получать данные между Arduino и Интернетом.
Для целей этого руководства мы будем считывать время, дату, температуру и влажность из Интернета с помощью API с ESP8266-01. Затем отправьте эти значения на плату Arduino и отобразите их на ЖК-экране 16 * 2. Звучит круто! Итак, приступим.
Необходимые материалы:
- Плата Arduino (любая версия)
- ESP8266-01
- Плата программатора FTDI с опцией 3,3 В
- ЖК-дисплей 16x2
- Потенциометр
- Нажать кнопку
- Соединительные провода
- Макетная плата
Как работают вещи?
Прежде чем мы погрузимся в подробности, важно знать, как на самом деле эта штука будет работать. По сути, нам нужно начать с модуля ESP8266-01. Мы будем использовать IDE Arduino для программирования ESP8266, и будет написан код для использования API для чтения файла JSON через HTTP-запрос. Затем мы сформулируем этот файл JSON, чтобы извлечь только необходимую информацию из полного файла JSON.
Как только информация будет сформулирована, мы распечатаем ее, используя последовательную связь. Затем эти последовательные линии будут подключены к Arduino, чтобы Arduino мог прочитать информацию, отправленную с ESP8266. Как только информация будет прочитана и обработана, мы отобразим ее на ЖК-экране.
Ничего страшного, если вы не до конца поняли это, потому что мы будем изучать то же самое в оставшейся части этого руководства.
Программирование ESP8266-01:
В этом руководстве предполагается, что у вас есть некоторый опыт работы с модулем ESP8266. Если нет, то рекомендуется прочитать следующие три руководства, чтобы полностью понять об этом.
- Начало работы с ESP8266-01
- Программирование ESP8266-01 с помощью AT-команд
- Программирование ESP8266-01 с использованием Arduino IDE и перепрошивка его памяти
Вы также можете проверить все наши проекты ESP8266 здесь.
Здесь мы собираемся запрограммировать модуль ESP8266-01 с помощью Arduino IDE. В качестве оборудования мы используем плату FTDI с напряжением 3,3 В для программирования ESP8266, поскольку это значительно упростит работу с оборудованием. Принципиальная схема подключения вашего ESP8266 к плате FTDI показана ниже.
Убедитесь, что выполняются следующие условия
1. ESP8266-01 допускает только 3,3 В, не используйте 5 В. Поэтому установите FTDI только в режим 3,3 В.
2. GPIO_0 должен быть заземлен для режима программирования.
3. Контакт сброса должен быть подключен через кнопку к контакту заземления. Эту кнопку следует нажать непосредственно перед загрузкой кода. При каждом нажатии кнопки синий светодиод на модуле ESP8266-01 загорается, указывая на то, что модуль сброшен.
После того, как соединения будут выполнены, откройте Arduino IDE и проверьте, можете ли вы успешно загрузить образец программы. Если вы не знаете, как использовать IDE Arduino для загрузки программы в ESP8266, следуйте инструкциям по программированию ESP8266 с Arduino, чтобы изучить его. На этом этапе я предполагаю, что вы успешно загрузили программу мигания.
. Полная программа приведена в конце этой страницы ниже, я объясняю их в виде небольших фрагментов. Программа также требует для компиляции библиотеки Arduino JSON, поэтому, если вы еще не добавили библиотеку в свою IDE Arduino, добавьте ее, загрузив из библиотеки Arduino JSON с Github.
ESP8266 должен подключаться к Интернету, чтобы получать данные о дате, времени, температуре и влажности. Таким образом, вы должны разрешить ему подключаться к вашему Wi-Fi, подтвердив SSID и пароль в следующих строках.
const char * ssid = "JIO-Fi"; // Введите свой SSID Wi-Fi const char * password = "Pas123"; // Введите свой пароль Wi-Fi
Внутри функции setup () мы проверяем, может ли ESP подключиться к Wi-Fi, в противном случае он будет ждать там вечно, просто напечатав «Connecting..» на последовательном мониторе.
while (WiFi.status ()! = WL_CONNECTED) {// Ждем подключения Wi-Fi delay (1000); Serial.print («Подключение..»); // Печать подключения.. пока подключение не будет установлено }
Следующий шаг - очень важный шаг. Если соединение Wi-Fi успешно, мы должны вызвать HTTP-запрос на получение, чтобы прочитать файл JSON из Интернета. В этом руководстве я использую API, предоставленный wunderground.com. Поэтому, если вы планируете использовать то же самое, вы можете перейти по ссылке и зарегистрироваться для получения бесплатного ключа API или использовать любой API по вашему выбору. Как только вы завершите работу над своим API, вы получите ссылку примерно так ниже
Примечание. Я изменил ключ API для этой ссылки, поэтому это не сработает. Держите свой ключ API в безопасности и не разглашайте его.
Мой API здесь используется для получения данных о погоде в Ченнаи. Вы можете использовать любой API. Но когда вы загружаете API в любом браузере, он должен вернуть файл JSON. Например, мой API возвращает следующий файл JSON
Ваш может вернуть файл с другими данными. Мы можем проверить, получил ли этот файл JSON также наш ESP8266, прочитав его и распечатав JSON на нашем последовательном мониторе, используя следующие строки
int httpCode = http.GET (); // передаем запрос на получение if (httpCode> 0) {// Проверяем код возврата // payload = http.getString (); // Сохраняем значение в переменной Payload для отладки // Serial.println (payload); // Распечатываем данные для отладки, в противном случае закомментируем обе строки
Я прокомментировал эти строки, так как они нужны только для тестирования. Убедившись, что ESP8266 может получать данные JSON, пора сформулировать эти данные. Как видите, эти данные огромны, и большинство значений бесполезны, за исключением тех, которые нам необходимы, таких как дата, время, температура и влажность.
Поэтому мы используем библиотеку JSON Arduino для разделения необходимых нам значений и сохранения их в переменной. Это возможно, потому что значения в файле JSON назначаются как пары имя-значение. Таким образом, это имя представляет собой строку, которая будет содержать необходимое нам значение.
Для этого нам нужно перейти на веб-сайт, который проанализирует файл JSON и предоставит нам код Arduino. Да, это так просто. Перейдите на https://arduinojson.org/assistant/ и вставьте файл JSON, который мы загрузили в наш браузер, и нажмите Enter. Когда я закончил, мой выглядел примерно так, как показано ниже
Прокрутите немного вниз, чтобы увидеть программу фразировки, которая создается автоматически.
Все, что вам нужно сделать, это выбрать нужную переменную, скопировать ее и вставить в свою Arduino IDE, как я сделал здесь
/ * Фразовые данные с использованием библиотеки JSON * / // Используйте https://arduinojson.org/assistant/, чтобы получить значения фразировки для вашей строки JSON const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * Конец данных фраз * / // Адресуем значение sin желаемым переменным JsonObject & current_observation = root; // под current_observation JsonObject & current_observation_observation_location = current_observation; // в местоположении наблюдения const char * current_observation_station_id = current_observation; // "ICHENNAI1" // получаем данные о местоположении const char * current_observation_local_time_rfc822 = current_observation; // Местное время // получить местное время const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // получить значение температуры const char * current_observation_relative_humidity = current_observation; // "73%" // получаем значение влажности
Я только что скопировал переменные current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string и current_observation_relative_humidity . Поскольку мы планируем отображать только эти четыре данных на нашем ЖК-экране.
Наконец, мы получили необходимые данные из Интернета и сохранили их в качестве переменной, которую мы можем удобно использовать. Чтобы отправить эти данные в Arduino, нам просто нужно записать их последовательно через последовательный монитор. Следующие строки будут делать то же самое
// Распечатать переменные через последовательный монитор Serial.print (current_observation_station_id); // отправляем данные о местоположении в Arduino delay (100); // задержка стабильности Serial.print (current_observation_local_time_rfc822); // отправляем детали местного времени в Arduino delay (100); // задержка стабильности Serial.print (current_observation_temperature_string); // отправляем данные о температуре в Arduino delay (100); // задержка стабильности Serial.print (current_observation_relative_humidity); // отправляем данные о влажности в Arduino delay (100); // задержка стабильности
Обратите внимание, что я использовал Serial.print (), а не Serial.println (), поскольку команда Serial.println () добавит / n и / r вместе с данными, которые нам не нужны. Мы также добавили задержку в 10 секунд, чтобы ESP отправлял эти значения только с интервалом в 10 секунд в Arduino.
Подключение ESP8266-01 к Arduino:
До сих пор мы запрограммировали ESP8266-01 на считывание необходимых данных из Интернета с интервалом в 10 секунд и их последовательную отправку. Теперь нам нужно связать ESP с Arduino, чтобы мы могли читать эти последовательные данные. Мы также должны добавить к Arduino ЖК-дисплей 16 * 2, чтобы мы могли отображать данные, полученные от модуля ESP8266. Схема для сопряжения ESP8266 модуль с Arduino показан ниже
Убедитесь, что контакт GPIO_0 оставлен свободным, подключите модуль только к контакту 3.3V Arduino и нажмите кнопку, чтобы установить модуль ESP в рабочий модуль. Теперь программа, которую мы загрузили в ESP, должна была начать работать, и модуль должен отправлять данные через последовательный вывод в Arduino. Эти последовательные контакты подключаются к контактам 6 и 7 на Arduino. Таким образом, мы можем использовать программную опцию последовательного порта на Arduino для чтения этих последовательных данных с контактов.
Программа и работа Arduino:
Полная Arduino программа также дается вместе с кодом ESP в конце этой страницы. Вы можете прокрутить вниз, чтобы просмотреть программу, или прочитать дальше, если хотите понять программу.
Программа сопряжения довольно проста, нам просто нужно использовать последовательную библиотеку программного обеспечения для считывания данных с контактов 6 и 7 и отображения их на ЖК-экране. Поскольку получаемые данные находятся в строковом формате, мы должны использовать опцию substring, чтобы разбить полезную нагрузку на наши требования или даже преобразовать ее в целое число, если это необходимо. Итак, мы начинаем с определения контактов, к которым подключен ЖК-дисплей.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Контакты, к которым подключен ЖК-дисплей LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Так как мы соединили контакты Rx и Те ESP8266 с 6 и 7 - й штифтом Arduino мы должны инициализировать серийное программное обеспечение для этих штифтов, так что мы можем получить последовательные данные из них.I имеют имена, как это ESP_Serial, вы можете назовите их как хотите
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Внутри функции setup () мы инициализируем последовательную связь для последовательного монитора, а также для программного обеспечения. Если вы помните, мы сделали программу ESP для связи со скоростью 9600 бод, поэтому мы должны использовать ту же скорость передачи для программного последовательного порта. Мы также отображаем небольшое вступительное сообщение на ЖК-дисплее в течение 2 секунд.
void setup () {lcd.begin (16, 2); // Мы используем ЖК-дисплей 16 * 2 lcd.print ("Arduino & ESP"); // Отображаем вводное сообщение Serial.begin (115200); ESP_Serial.begin (9600); задержка (2000); lcd.clear (); }
Внутри функции main loop () мы должны проверить, отправляет ли что-нибудь ESP8266. Если это так, мы читаем строку из ESP8266 и сохраняем ее в переменной с именем payload. Полезная нагрузка переменной имеет тип String и будет содержать полную информацию, отправленную из модуля ESP8266.
а (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Теперь нам нужно разделить эту строку на небольшие части, чтобы мы могли использовать их для наших собственных целей, в этом случае мы должны разделить их для отображения на ЖК-экране. Это легко сделать с помощью функции подстроки в Arduino. Вы должны знать позицию каждого символа, чтобы использовать эту функцию подстроки . Вы можете распечатать полезную нагрузку на последовательном мониторе, чтобы узнать положение символов и использовать их для категоризации подстрок, как показано ниже.
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); температура = payload.substring (48, 54); Влажность = payload.substring (55, 60);
Теперь я могу использовать эти переменные, чтобы либо распечатать их на последовательном мониторе, либо просто распечатать на ЖК-дисплее. Однако их печать на последовательном мониторе поможет нам проверить, правильно ли разделены подстроки. Затем мы просто печатаем их на ЖК-дисплее, используя следующие строки
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (местное_время); lcd.setCursor (1, 1); lcd.print (температура); lcd.setCursor (10, 1); lcd.print (Влажность);
Загрузите программу в Arduino и убедитесь, что соединения выполнены так, как показано на приведенной выше принципиальной схеме. Отрегулируйте контрастность ЖК-дисплея, чтобы четко видеть предметы. Вы должны увидеть вводное сообщение на ЖК-дисплее, а затем через несколько секунд на ЖК-экране должны появиться такие детали, как дата, время, температура и влажность, как показано ниже.
Вы также можете заметить, что синий светодиод на ESP8266 мигает каждый раз, когда поступают данные. Если вы этого не видите, это означает, что ESP не в режиме программирования, попробуйте нажать кнопку сброса и проверьте соединения.
Подобно этому, вы можете использовать любой API для получения любых необходимых данных из Интернета и передачи их в Arduino, а также для обработки вашей работы с Arduino. В Интернете доступно множество API, и с их помощью вы можете создавать неограниченное количество проектов. Надеюсь, вы поняли проект и получили удовольствие от его создания. Если вы столкнулись с какой-либо проблемой, опубликуйте их в разделе комментариев ниже или на нашем форуме.
Вы можете найти все наши проекты, связанные с ESP8266, здесь.