Uno wifi r3 atmega328p esp8266 прошивка

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

License

KamranBabar16/UNO-WiFi-R3-ATmega328P-ESP8266

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

This project is made for Arduino Uno WiFi is an Arduino Uno with an integrated WiFi module. Now you can use both module together communicating with each other using serial pins without modifying any firmware.

Don’t forget to change board options before uploading when switching.

Источник

Используем Arduino UNO с WiFi на одной плате для POST запроса на сервер

В статье «Как у меня заработал WIFI для Arduino ESP8266 ESP-12E» рассказывал как заставить работать платы Arduino UNO с ESP8266 ESP-12E UART Wi-Fi.

Но зачем такие сложности, если есть уже совмещенная плата?

Вместо слоеного пирога из двух плат:

И она заработала безо всяких прошивок и перепрошивок.

Работает только на скорости 115200

Среда Arduino уже была настроена для работы.

Осталось только переключатели перещелкивать, чтобы заливать скетч в UNO.

Таблица положений переключателей есть здесь.

Вот только не упомянуто положение переключателей (1-4 ON), когда во время работы Mega328+ESP8266 CH340 мониторит порт и выводит в консоль передаваемые команды.

Как настроить среду Arduino объясняется здесь или здесь.

Таблица переключателей.

CH340 connect to ESP8266 (upload sketch)

CH340 connect to ESP8266 (connect)

CH340 connect to ATmega328 (upload sketch)

All modules work independent

Совместная работа и мониторинг команд

Передача информации на серверы Cayenne и RemoteXY.

Протестировал плату на решении задач, скетчи которых заливал в слоеный пирог из двух плат:

Эти сервисы предоставляют свои библиотеки для работы с ESP8266.

Все заработало сразу без изменений и мучений.

Необходимо в скетчах заменить скорость на 115200.

Передача информации на произвольный сервер.

Решение предыдущей задачи «Отправка данных из ESP8266WiFi на сервер с CMS MaxSite» с этой платой повторить не удалось.

Для отправки данных на произвольный сервис использовалась универсальная библиотека WiFiESP.

И оказалось, что эта библиотека не заработала с этой платой, выдавая

[WiFiEsp] Warning: Unsupported firmware 0.9.5

Действительно, модуль при обращении с соответствующей командой AT+GMR сообщает версию SDK 0.9.5:

В файле README.md библиотеки можно прочитать:

Попытки обновить прошивку при помощи flash_download_tools не увенчались успехом (да и не старался особо):

Ведь библиотеки Cayenne и RemoteXY для этой платы заработали без проблем!

Читайте также:  Защита человека от wi fi

В этих статьях описывается способ обращения к ESP8266 обычными командами без библиотек.

Будем обрабатывать POST запрос к серверу при помощи плагина my_esp8266 для MaxSiteCMS, который принимает данные.

Заработал вот такой скетч.

// отсылает данные в плагин http://fil-tec.ru/tag/My_ESP8266 для MaxSite CMS String ssid ="Router name"; String password="**********"; String server = "my.site.ru"; // сайт, на котором установлен пагин My_esp8266 String uri = "/ajax/**************************"; // скопировать со страницы "Тест" админки плагина My_esp8266 адрес для обращения с запросами String PORT = "80"; int countTrueCommand; int countTimeCommand; boolean found = false; int valSensor = 1; String jsonString; // данные String PostHeader; // заголовок String data; int DHpin = 4; //sensor pin byte dat [5]; String temp ,hum; #define PIN_SWITCH_1 12 #define PIN_SWITCH_2 13 void setup() < pinMode (DHpin, OUTPUT); pinMode (PIN_SWITCH_1, OUTPUT); pinMode (PIN_SWITCH_2, OUTPUT); Serial.begin(115200); reset(); connectWifi(); >void reset() < Serial.println("AT+RST"); delay(1000); >//connect to your wifi network void connectWifi() < Serial.begin(115200); sendCommand("AT", 5, "OK"); sendCommand("AT+CWMODE=1", 5, "OK"); sendCommand("AT+CWJAP=\"" + ssid + "\",\"" + password + "\"", 20, "OK"); digitalWrite(PIN_SWITCH_2, (found == true)?LOW:HIGH); >byte read_data () < byte data; for (int i = 0; i < 8; i ++) < if (digitalRead (DHpin) == LOW) < while (digitalRead (DHpin) == LOW); // wait for 50us delayMicroseconds (30); // determine the duration of the high level to determine the data is '0 'or '1' if (digitalRead (DHpin) == HIGH) data |= (1 > return data; > void start_test () < digitalWrite (DHpin, LOW); // bus down, send start signal delay (30); // delay greater than 18ms, so DHT11 start signal can be detected digitalWrite (DHpin, HIGH); delayMicroseconds (40); // Wait for DHT11 response pinMode (DHpin, INPUT); while (digitalRead (DHpin) == HIGH); delayMicroseconds (80); // DHT11 response, pulled the bus 80us if (digitalRead (DHpin) == LOW); delayMicroseconds (80); // DHT11 80us after the bus pulled to start sending data for (int i = 0; i < 4; i ++) // receive temperature and humidity data, the parity bit is not considered < Serial.println(i); dat[i] = read_data (); >pinMode (DHpin, OUTPUT); digitalWrite (DHpin, HIGH); // send data once after releasing the bus, wait for the host to open the next Start signal > void loop () < start_test (); // convert the bit data to string form hum = String(dat[0]); temp= String(dat[2]); jsonString = "secret=0000&name=ESP_8266WiFi&temp=" + temp + "&hum=" + hum; httppost(); delay(1000); >void httppost () < String postRequest = "POST " + uri + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "User-Agent: ESP8266WiFi\r\n" + "Accept: application/xml\r\n" + "X-Requested-With: XMLHttpRequest\r\n" + "Referer: http://my.site.ru\r\n" + "Connection: close\r\n" + "Content-Length: " + jsonString.length() + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "\r\n" + jsonString; sendCommand("AT+CIPMUX=1", 5, "OK"); sendCommand("AT+CIPSTART=0,\"TCP\",\"" + server + "\"," + PORT, 15, "OK"); sendCommand("AT+CIPSEND=0," + String(postRequest.length() + 2), 4, ">"); sendCommand(postRequest, 5, "OK"); delay(1500); countTrueCommand++; sendCommand("AT+CIPCLOSE=0", 5, "OK"); > void sendCommand(String command, int maxTime, char readReplay[]) < while (countTimeCommand < (maxTime * 1)) < Serial.println(command);//at+cipsend delay(1500); if (Serial.find(readReplay)) //ok < found = true; break; >countTimeCommand++; > if (found == true) < // успешно digitalWrite(PIN_SWITCH_1, LOW); countTrueCommand++; countTimeCommand = 0; >if (found == false) < // неудачно digitalWrite(PIN_SWITCH_1, HIGH); countTrueCommand = 0; countTimeCommand = 0; >found = false; >

Источник

Arduino библиотека WiFi

Библиотека WiFi используется для подключения Arduino по протоколу WiFi к локальной сети, интернету или другим устройствам, а так же для создания сервера, что бы другие устройства и компьютеры могли подключаться к вашей ардуинке «по воздуху».

Стандартные модели Arduino такие как Uno, Nano или Mega не поддерживают такое подключение сами по себе, но можно добавить такую возможность для них при помощи WiFi шилда. Или можно использовать другие контроллеры с поддержкой WiFi: ESP32, ESP 8266, Arduino Uno WiFi, Arduino Yún, Arduino Tian и множество других.

WiFi шилд использует протокол SPI для коммуникации с Ардуино. На плате Uno и Nano он располагается на пинах 10, 11, 12 и 13, и на 50, 51, 52, 53 на плате Mega. Подробнее о распиновке вы можете почитать на страницах с описанием Arduino Uno, Arduino Nano и Arduino Mega. WiFi библиотека имеет множество сходств с библиотекой Ethernet, в том числе и одинаковые функции.

Читайте также:  Поставить wi fi карту

Скачать Arduino библиотеку WiFi.h

WiFi идет в комплекте стандартных библиотек и устанавливается вместе с Arduino IDE. Но ее можно скачать и отдельно по ссылке ниже.

Для установки библиотеки просто распакуйте zip архив в папку «C:\Program Files (x86)\Arduino\libraries» или в то место, где у вас установлена среда разработки Arduino IDE. Если у вас запущена программа Arduino IDE, то для работы с новой библиотекой её необходимо перезапустить.

В состав библиотеки WiFi входит несколько классов:

  • WiFi — инициализация подключения и настроек сети
  • IPAddress — предоставление информации о настройках сети
  • Server— создание сервера, который может отправлять и принимать данные от клиента (программы запущенной на другом устройстве)
  • Client — создание клиента который может подключаться к серверам и отправлять и принимать данные
  • UDP — класс для отправки и принятия UDP сообщений

Примеры работы Arduino и ESP с WiFi.h

Далее я приведу примеры использования библиотеки WiFi.h. В примерах будут разобраны базовые задачи. Код примеров можно использовать на любой Arduino с wifi шилдом и на всех платах с чипами ESP 8266 и ESP32. Описание использованных команд вы найдете по ссылкам выше, но я постараюсь оставить в коде примеров подробные комментарии.

Подключение к WiFi сети с шифрованием WPA2.

Этот пример показывает как подключиться к домашней WiFi сети, использующей протокол шифрования WPA2. Так же помимо подключения к сети мы отправим информацию о текущем подключении в монитор последовательного порта.

#include // Библиотека для связи с wifi шилдом #include // Библиотека для работы с wifi подключением char ssid[] = "yourNetwork"; // SSID вашей сети (имя) char pass[] = "secretPassword"; // пароль от вашей сети int status = WL_IDLE_STATUS; // переменная для статуса подключения void setup() < // Открываем серийный порт Serial.begin(9600); while (!Serial) < ; // ждем установки связи >// Проверяем статус подключения wifi shield. Не нужно для плат на базе esp if (WiFi.status() == WL_NO_SHIELD) < Serial.println("WiFi shield не найден"); // дальше не продолжаем while (true); >// пробуем подключиться к Wifi сети while (status != WL_CONNECTED) < Serial.print("Подключение к: "); Serial.println(ssid); // Подключаемся status = WiFi.begin(ssid, pass); // даем 10 секунд на подключение delay(10000); >// Подключение прошло успешно Serial.print("Вы подключены к сети"); printCurrentNet(); // Выводим наш IP и MAC printWifiData(); // IP, MAC роутера и сила сигнала > void loop() < // Проверяем подключение каждые 10 секунд delay(10000); printCurrentNet(); >// Функция для вывода в серийный монитор IP и MAC адресов нашего WiFi шилда void printWifiData() < // узнаем и отправляем наш IP IPAddress ip = WiFi.localIP(); Serial.print("Локальный IP адрес: "); Serial.println(ip); // узнаем и отправляем наш MAC адрес byte mac[6]; WiFi.macAddress(mac); Serial.print("MAC адрес: "); Serial.print(mac[5], HEX); Serial.print(":"); Serial.print(mac[4], HEX); Serial.print(":"); Serial.print(mac[3], HEX); Serial.print(":"); Serial.print(mac[2], HEX); Serial.print(":"); Serial.print(mac[1], HEX); Serial.print(":"); Serial.println(mac[0], HEX); >// Функция для отправки в серийный монитор имени сети к которой мы сейчас подключены void printCurrentNet() < Serial.print("SSID: "); Serial.println(WiFi.SSID()); // Так же отправим МАС адрес роутера byte bssid[6]; WiFi.BSSID(bssid); Serial.print("BSSID: "); Serial.print(bssid[5], HEX); Serial.print(":"); Serial.print(bssid[4], HEX); Serial.print(":"); Serial.print(bssid[3], HEX); Serial.print(":"); Serial.print(bssid[2], HEX); Serial.print(":"); Serial.print(bssid[1], HEX); Serial.print(":"); Serial.println(bssid[0], HEX); // А так же отправим силу сигнала long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.println(rssi); // Ну и тип шифрования byte encryption = WiFi.encryptionType(); Serial.print("Encryption Type:"); Serial.println(encryption, HEX); Serial.println(); >

Arduino WiFi web клиент

В этом примере мы отправим HTTP запрос с нашего микроконтроллера. Мы получим в ответ страницу Google поиска с результатами по запросу Arduino. Результатом будет HTML текст, который можно будет просмотреть в окне серийного монитора на компьютере. Так же можно скопировать этот текст в текстовый файл с расширением .html и открыть этот файл с помощью браузера.

#include #include char ssid[] = "yourNetwork"; // SSID вашей сети (имя) char pass[] = "secretPassword"; // пароль от вашей сети int keyIndex = 0; // индекс ключа (нужно только для WEP шифрования с использованием нескольких ключей) int status = WL_IDLE_STATUS; // переменная для статуса подключения //IPAddress server(74,125,232,128); // IP Google если не хотите использовать DNS char server[] = "www.google.com"; // адрес Google с использованием DNS // Инициализируем библиотеку интернет клиента WiFiClient client; void setup() < // Открываем серийный порт Serial.begin(9600); while (!Serial) < ; // ждем подключения >// проверяем работу wifi шилда if (WiFi.status() == WL_NO_SHIELD) < Serial.println("WiFi shield не подключен"); while (true); >// пытаемся подключиться к wifi while (status != WL_CONNECTED) < Serial.print("Подключение к: "); Serial.println(ssid); status = WiFi.begin(ssid, pass); // ждем подключения delay(10000); >Serial.println("Подключен к wifi"); printWifiStatus(); Serial.println("\nНачинаем подключение к серверу. "); if (client.connect(server, 80)) < Serial.println("подключились к серверу"); // Составляем HTTP запрос: client.println("GET /search?q=arduino HTTP/1.1"); client.println("Host: www.google.com"); client.println("Connection: close"); client.println(); >> void loop() < // если есть входящие данные от сервера // то считываем их и выводим в серийный порт while (client.available()) < char c = client.read(); Serial.write(c); >// если сервер отключился то останавливаем клиент if (!client.connected()) < Serial.println(); Serial.println("отключение от сервера"); client.stop(); while (true); >> // Функция для вывода информации о wifi подключении void printWifiStatus() < // выводим имя сети к которой мы подключены Serial.print("SSID: "); Serial.println(WiFi.SSID()); // выводим наш локальный IP адрес IPAddress ip = WiFi.localIP(); Serial.print("IP адрес: "); Serial.println(ip); // выводим силу сигнала long rssi = WiFi.RSSI(); Serial.print("сила сигнала (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); >

Простейший web сервер на Arduino

В этом примере мы запусти свой веб сервер прямо на нашем микроконтроллере. Он будет отдавать простейшую HTML страницу с показаниями, считываемыми с аналоговых пинов. С любого устройства в этой локальной сети можно будет подключиться к серверу и получить эти данные. А если настроить сеть и пробросить порты, то можно подключаться к вашему серверу через интернет из любой точки мира, но это тема для отдельной статьи.

#include #include char ssid[] = "yourNetwork"; // SSID вашей сети (имя) char pass[] = "secretPassword"; // пароль от вашей сети int keyIndex = 0; // индекс ключа (нужно только для WEP шифрования с использованием нескольких ключей) int status = WL_IDLE_STATUS; // переменная для статуса подключения WiFiServer server(80); void setup() < // Открываем серийный порт Serial.begin(9600); while (!Serial) < ; // ждем подключения >// проверяем работу wifi шилда if (WiFi.status() == WL_NO_SHIELD) < Serial.println("WiFi shield не подключен"); while (true); >// пытаемся подключиться к wifi while (status != WL_CONNECTED) < Serial.print("Подключение к: "); Serial.println(ssid); status = WiFi.begin(ssid, pass); // ждем подключения delay(10000); >Serial.println("Подключен к wifi"); printWifiStatus(); // Запускаем сервер server.begin(); > void loop() < // слушаем входящие клиенты WiFiClient client = server.available(); if (client) < Serial.println("Новый клиент"); bool currentLineIsBlank = true; while (client.connected()) < if (client.available()) < char c = client.read(); Serial.write(c); // если пришла пустая строка значит запрос закончился // тогда мы можем отправлять ответ if (c == '\n' && currentLineIsBlank) < // отправляем стандартные http заголовки client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // закрыть соединение после получения ответа client.println("Refresh: 5"); // автоматическое обновление ответа каждые 5 секунд client.println(); client.println(""); client.println(""); // выводим данные каждого аналогово пина for (int analogChannel = 0; analogChannel < 6; analogChannel++) < int sensorReading = analogRead(analogChannel); client.print("Значение пина "); client.print(analogChannel); client.print(": "); client.print(sensorReading); client.println("
"); > client.println(""); break; > if (c == '\n') < // вы начали новую линию currentLineIsBlank = true; >else if (c != '\r') < // вы получили символ на текущей линии currentLineIsBlank = false; >> > // небольшая задержка на то что бы браузер получил данные delay(1); // закрываем подключение client.stop(); Serial.println("Клиент отключен"); > > // Функция для вывода информации о wifi подключении void printWifiStatus() < // выводим имя сети к которой мы подключены Serial.print("SSID: "); Serial.println(WiFi.SSID()); // выводим наш локальный IP адрес IPAddress ip = WiFi.localIP(); Serial.print("IP адрес: "); Serial.println(ip); // выводим силу сигнала long rssi = WiFi.RSSI(); Serial.print("сила сигнала (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); >

Железо

Стартовый набор с Arduino Mega и RFID

Стартовый набор с Arduino Mega и RFID Это расширенный стартовый набор. В комплект входит Arduino Mega R3, макетные платы, множество датчиков, управляемые механизмы и необходимые радиоэлектронные компоненты. Полный список.

Читайте также:  Подбор кода вай фай

Плата Arduino Uno R3

Плата Arduino Uno R3 Arduino Uno — плата на базе микроконтроллера ATmega328P с частотой 16 МГц. На плате есть все необходимое для удобной и быстрой работы.

Источник

Оцените статью
Adblock
detector