В наличии контроллер, который управляет различной нагрузкой в зависимости от показаний датчиков. Контроллер реализован на arduino nano. Так же есть ESP8266 -01
Хочется что бы контроллер передавал информацию на web сервер, который находится на ESP.
Соответственно, пользователь подключается к wi-fi точке доступа, которую создает ESP и обращается по адресу web-сервера, который выдает ему страничку с информацией о состоянии контролера.
За основу взят пример WiFiWebServer из Arduino IDE (огромный респект создателям). Пример отрабатывает. Сервер выдает страничку.
Теперь я пытаюсь передать из arduino данные контроллера. Так как на нем остался один цифровой пин и RX0 c TX1, то выбор пал на обмен по UART.
Собрал схему по примеру:
http://bigbarrel.ru/arduino_serial_uart_net/
Т.е. arduino, выставляет 1 на цифровом пине, который подключен к GIO2 ESP. Затем начинается передача данных по последовательному порту:
На ESP, к GIO2 подвешено прерывание
обработка прерывания
Не работает.
Причем само прерывание срабатывает, проверял. Но стоит включить чтение из порта, сервер зависает. И как либо диагностировать не получается. Так как монитор последовательного порта не включить.
Вопрос: Что я делаю не правильно? ИМХО включать передачу данных по последовательному порту в программу обработки прерывания - не самая лучшая идея. Но как тогда сообщить ESP, что ему нужно считывать данные из порта?
Хочется что бы контроллер передавал информацию на web сервер, который находится на ESP.
Соответственно, пользователь подключается к wi-fi точке доступа, которую создает ESP и обращается по адресу web-сервера, который выдает ему страничку с информацией о состоянии контролера.
За основу взят пример WiFiWebServer из Arduino IDE (огромный респект создателям). Пример отрабатывает. Сервер выдает страничку.
Теперь я пытаюсь передать из arduino данные контроллера. Так как на нем остался один цифровой пин и RX0 c TX1, то выбор пал на обмен по UART.
Собрал схему по примеру:
http://bigbarrel.ru/arduino_serial_uart_net/
Т.е. arduino, выставляет 1 на цифровом пине, который подключен к GIO2 ESP. Затем начинается передача данных по последовательному порту:
Код:
digitalWrite(SERIALBEGINPIN, HIGH); // начинаем обмен по UART
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(d2);//задержка для срабатывания прерывания на контроллерах приема
Serial.print("This is the perfect world");
delay(d);//задержка для приема сообщения
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
digitalWrite(SERIALBEGINPIN, LOW); // завершаем обмен по UART
Код:
pinMode(2,INPUT);
attachInterrupt(2,getSerial,RISING );
Код:
void getSerial(){ //прием данных по прерыванию
noInterrupts(); //отключаем прерывания
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
if(inputString.length()>0){
XYZ = XYZ +1; // пременная для проверки срабатывания прерывания
}else {
XYZ=111;
}
interrupts(); //включаем прерывания.
}
Причем само прерывание срабатывает, проверял. Но стоит включить чтение из порта, сервер зависает. И как либо диагностировать не получается. Так как монитор последовательного порта не включить.
Вопрос: Что я делаю не правильно? ИМХО включать передачу данных по последовательному порту в программу обработки прерывания - не самая лучшая идея. Но как тогда сообщить ESP, что ему нужно считывать данные из порта?