Arduino+ESP01+Rfid+WebServer
- Войдите на сайт для отправки комментариев
Здравствуйте!
Есть веб сервер с базой данных для учета входа и выхода по Rfid карте, есть рабочий скейтч для Nodemcu. Но возникла необходимость использовать именно Arduino Uno в связке с ESP-01. Мне удалось частично переделать скейтч под Arduino, сейчас данные о карте передаются на сервер, сравниваются по базе и возвращаются обратно в монитор порта, т.е есть передача данных работает в обе стороны.
Проблема заключается в том, что мне нужно прикрутить часть кода от Nodemcu, которая при наличии зарегистрированного пользователя включала например светодиод,но моих знаний не хватает.
Помогите решить задачу.
Эта часть кода, которую нужно внести в Arduino. Нужна реакция контроллера на login и logout, при остальных просто чтение или игнор.
int httpCode = http.GET(); //Send the request String payload = http.getString(); //Get the response payload // Serial.println(Link); //Print HTTP return code Serial.println(httpCode); //Print HTTP return code Serial.println(Card_uid); //Print Card ID Serial.println(payload); //Print request response payload if (httpCode == 200) { if (payload.substring(0, 5) == "login") { String user_name = payload.substring(5); digitalWrite(RedLed, LOW); digitalWrite(GriLed, HIGH); delay(5000); digitalWrite(RedLed, HIGH); digitalWrite(GriLed, LOW); } else if (payload.substring(0, 6) == "logout") { String user_name = payload.substring(6); digitalWrite(RedLed, LOW); digitalWrite(GriLed, HIGH); delay(5000); digitalWrite(RedLed, HIGH); digitalWrite(GriLed, LOW); } else if (payload == "succesful") { } else if (payload == "available") { } delay(100); http.end(); //Close connection }
Сам код для Ардуино.
#include <SPI.h> #include <MFRC522.h> #include "SoftwareSerial.h" #define SS_PIN 10 #define RST_PIN 9 String ssid = "SHADOW"; String password = "73835264"; const char* device_token = "beac906e7a4da323"; SoftwareSerial esp(2, 3);// RX, TX String server = "192.168.0.30"; //Your Host String uri = "/scud/getdata.php"; //#define LED_G 4 //define green LED pin #define LED_R 8 //define red LED MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. String rfidUid = ""; #define DEBUG true void setup() { // Serial.begin(9600); // Initiate a serial communication esp.begin(9600); Serial.begin(115200); SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 connectWifi(); httpget(); delay(1000); Serial.println("Поднесите свою карту к считывателю..."); Serial.println(); pinMode(LED_R, OUTPUT); digitalWrite(LED_R, HIGH); } void connectWifi() { sendData("AT+RST\r\n", 3000, DEBUG); //This command will reset module to default sendData("AT+CWMODE=3\r\n", 2000, DEBUG); String cmd = "AT+CWJAP=\"" + ssid + "\",\"" + password + "\""; esp.println(cmd); delay(4000); if (esp.find("OK")) { Serial.println("Подключился к сети!"); } else { Serial.println("Не удается подключиться к Wi-Fi ! Снова подключаюсь..."); connectWifi(); } } void httpget() { // // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } Serial.print("UID:"); String content = ""; byte letter; rfidUid = ""; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], DEC); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], DEC)); rfidUid += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : ""); rfidUid += String(mfrc522.uid.uidByte[i], DEC); } Serial.println(); content.toUpperCase(); esp.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");//start a TCP connection. if ( esp.find("OK")) { Serial.println("TCP-соединение установлено"); } delay(1000); if ( esp.find("OK")) { Serial.println("TCP-соединение установлено"); } delay(1000); String getRequest = "GET " + uri + "?card_uid=" + rfidUid + "&device_token=" + String(device_token) + " HTTP/1.0\r\n" + "Host: " + server + "\r\n" + "Accept: *" + "/" + "*\r\n" + "Content-Type: text/plain\r\n" + "\r\n"; String sendCmd = "AT+CIPSEND="; esp.print(sendCmd); esp.println(getRequest.length()); delay(500); if (esp.find(">")) { Serial.println("Отправка.."); esp.print(getRequest); if (esp.find("SEND OK")) { Serial.println("Пакет отправлен"); delay(200); // ждем немного while (esp.available()) { // читаем ответ и отправляем его в Serial String response = esp.readString(); Serial.println("response.." + response); } esp.println("AT+CIPCLOSE"); } } } void loop() { httpget(); } String sendData(String command, const int timeout, boolean debug) //Функция отправки данных на esp8266 { String response = ""; esp.print(command); // Отправьте команду на ESP8266 long int time = millis(); while ( (time + timeout) > millis()) // ESP8266 будет ждать некоторое время для получения данных { while (esp.available()) // ESP8266 будет ждать некоторое время для получения данных { char c = esp.read(); // Прочитайте следующий символ. response += c; // Сохранение ответа от ESP8266 } } if (debug) { Serial.print(response); // Печать ответа ESP8266 на последовательном мониторе. } return response; }
возникла необходимость использовать именно Arduino Uno
можете пояснить, в чем эта "необходимость"? - а то как-то толи бредом. толи курсовой попахивает
возникла необходимость использовать именно Arduino Uno
можете пояснить, в чем эта "необходимость"? - а то как-то толи бредом. толи курсовой попахивает
Необходимость в том,что Ардуино проще запитать с подачей 12v, т.е один блок питания на контроллер и эл.магнит на двери. Также есть сомнения в стабильности сигнала wifi, соответственно для Ардуино есть возможность использовать в крайнем случае шилд с портом под сетевой кабель. Планируется использовать по 1 устройству на двух этажах, для установки в помещения душевых. Плюс устройства уже куплены за свои кровные.
По поводу бреда или курсовых - для курсовых я уже не в том возрасте, да и к тому же все, что нужно (скейтч под ESP8266, сам контроллер и сервер - уже есть и протестирован). Но нужно именно на базе ардуино.
Бред? Может быть, с точки зрения профессионала это и так. Но, я только знакомлюсь с программированием для личных целей, поэтому и попросил о помощи.
Плюс устройства уже куплены за свои кровные.
UNO-350 руб. + ESP-01 -90руб = 440руб.
NODEMCU - 155руб.
Вот только что на Али проверил свежие цены. ;))))))
Ну и плюс минимум 2000р за код, который ты сам написать не можешь, а значит придется заказывать.
Просто интересно, а ножи у тебя дома тоже тупые?
Помни, контроллер подбирают под задачу, а не наоборот. Наоборот - пахнет идиотизмом, типа, парни, мне очень нужно на Жигулях перевезти 2 тонны песка за раз, как мне сделать и закрепить бак такого размера на крыше? Смекаешь?
Uno - 170р + ESP-01 - 90р, ну ни как ни 440р
Nodemcu - 350р
На UNO- 3шт комплекта уже куплено.
С ножами не в тему, или это больной вопрос о ваших ножах у вас дома?
Я попросил о помощи, а не о сарказме. Если вы не можете или не хотите, пройдите просто мимо..
Помни, контроллер подбирают под задачу, а не наоборот. Наоборот - пахнет идиотизмом, типа, парни, мне очень нужно на Жигулях перевезти 2 тонны песка за раз, как мне сделать и закрепить бак такого размера на крыше? Смекаешь?
Вполне, но с данной задачей справляются оба контроллера вполне не плохо. По факту осталось только поправить код, чтобы ардуино понимал, что ему сообщает сервер. Остальное то,работает - метка читается, передается на сервер, ответ от сервера поступает, а вот с реакцией на ответ сервера пока загвоздка..
1.Nodemcu - 350р
2.С ножами не в тему, или это больной вопрос о ваших ножах у вас дома?
3.Я попросил о помощи, а не о сарказме. Если вы не можете или не хотите, пройдите просто мимо..
1. https://aliexpress.ru/item/32665100123.html
154руб 65коп. ;))
2. Это был намек на то, что ты тупой. Сорри, если было непонятно. Не сарказм. Просто прямой намек.
3. Какой помощи? Сравнить строки? В УНО тоже String реализован, может у тебя памяти и так хватит. Или на C-string переходи. Все функции описаны тут: http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html
Это ОФИЦИАЛЬНАЯ страница avr-libc. То есть того, что в Arduino IDE использовано.
Со сравнением строк помогать даром точно не стану. Есть нужда - в платный раздел, моя телега @wdrakula. Можешь точно написать что именно не получается? Ответ принимаешь от сервера и просто не знаешь как строки сравнить? Может даже денег не возьму... как настроение будет. Напечатай ответ сервера в Сериал, может сразу всё и так поймешь, бЭЭЭзплатно. ;))
А по задаче нужно делать так:
1. Если есть опасения по поводу WiFi, нужно взять модуль с внешней антенной. Wemos D1 mini + антенна. примерно 450 р на Али.
2. Поставить стабилизатор (раньше называли КРЕН-ка ;)) ) 7809 - на 9 Вольт. Из 12 9 получается на ура и дополнительная стабилизация заодно. 9В уже подавать на ESP8266 (Вемос или Нодмцу).
3. При необходимости Ethernet -модуль подключается к ESP точно так-же, как и к УНО, по SPI. Нет нужды брать модуль в форм-факторе "Шилд", можно взять отдельный.
-------------
Почему так? Задачу решают от "бутылочного горлышка". У тебя это код (судя по вопросу). Код для ЕСП у тебя есть. Зачем ты взялся за то, что сложно для тебя? Тем более применение коммерческое, какие-то душевые?
Попробовал вот таким образом вписать код, все равно не хочет распознавать ответ из порта
Повторю: обратись в "Ищу исполнителя"
Я тут колесо от Оки купил, дёшево и всего 5 Тыр пробега. К моему Билазу подойдёт? А то карьер простаивает..
Я тут колесо от Оки купил, дёшево и всего 5 Тыр пробега. К моему Билазу подойдёт? А то карьер простаивает..
Подойдёт, как только орфографию подтянешь.
вы бы не ерничали, а гребли в платный раздел. А то с кодом у вас кранты, самостоятельно отладить явно не способны :)
Вот это что такое:
это у вас число или строка? :)