The final project of Embedde class.
Diff: ESP-call.cpp
- Revision:
- 0:6489e982d4c9
- Child:
- 1:c51792ac72d6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ESP-call.cpp Wed May 12 03:11:56 2021 +0000 @@ -0,0 +1,105 @@ +// ====================================================================== + +#include "mbed.h" +#include "ESP-call.h" + +// ====================================================================== + +RawSerial PC(USBTX, USBRX); // PC = (USBTX=TX, USBRX=RX) +RawSerial ESP(D1, D0); // ESP = (D1=TX, D0=RX) +DigitalOut ESP_reset_pin(D2); // ESP_reset_pin = D2 + +// ====================================================================== + +char ESP_recv_buffer[1028]; // ESP receive buffer +int ESP_recv_buffer_index; // ESP receive buffer index + +// ====================================================================== +// ISR for redirecting PC RX to ESP TX + +void ISR_PC_to_ESP() +{ + while(PC.readable()) { + ESP.putc(PC.getc()); + } +} + +// ====================================================================== +// ISR for redirecting ESP RX to PC TX + +void ISR_ESP_to_PC() +{ + while(ESP.readable()) { + PC.putc(ESP.getc()); + } +} + +// ====================================================================== +// ISR for redirecting ESP RX to ESP_recv_buffer[] + +void ISR_ESP_to_recv_buffer() +{ + while(ESP.readable()) { + ESP_recv_buffer[ESP_recv_buffer_index++] = ESP.getc(); + } +} + +// ====================================================================== +// Reset ESP and wait for 1 second + +void ESP_reset(void) +{ + ESP_reset_pin = 0; + ESP_reset_pin = 1; + thread_sleep_for(1000); +} + +// ====================================================================== +// Setup ESP echo/noecho mode +// ====================================================================== + +void ESP_echo(void) +{ + NodeMCU_PGM uart_setup_echo = { + "uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 1)\r\n", 1, + }; + + ESP_call_single(uart_setup_echo); +} + +void ESP_noecho(void) +{ + NodeMCU_PGM uart_setup_noecho = { + "uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0)\r\n", 1, + }; + + ESP_call_single(uart_setup_noecho); +} + +// ====================================================================== +// Send NodeMCU_PGM to ESP and execute + +char *ESP_call_single(NodeMCU_PGM pgm) +{ + ESP_recv_buffer_index = 0; + ESP.attach(&ISR_ESP_to_recv_buffer, Serial::RxIrq); + ESP.printf("%s\r\n", pgm.code); + thread_sleep_for((pgm.delay) * 100); + ESP.attach(NULL, Serial::RxIrq); + ESP_recv_buffer[ESP_recv_buffer_index] = '\0'; + return ESP_recv_buffer; +} + +void ESP_call_multi(NodeMCU_PGM pgms[]) +{ + int i; + char *p; + + for(i = 0; pgms[i].code != NULL; i++) { + PC.printf("%s\r\n", pgms[i].code); + p = ESP_call_single(pgms[i]); + PC.printf("%s", p); + } +} + +// ======================================================================