The final project of Embedde class.
ESP-call.cpp@0:6489e982d4c9, 2021-05-12 (annotated)
- Committer:
- dshin
- Date:
- Wed May 12 03:11:56 2021 +0000
- Revision:
- 0:6489e982d4c9
- Child:
- 1:c51792ac72d6
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dshin | 0:6489e982d4c9 | 1 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 2 | |
dshin | 0:6489e982d4c9 | 3 | #include "mbed.h" |
dshin | 0:6489e982d4c9 | 4 | #include "ESP-call.h" |
dshin | 0:6489e982d4c9 | 5 | |
dshin | 0:6489e982d4c9 | 6 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 7 | |
dshin | 0:6489e982d4c9 | 8 | RawSerial PC(USBTX, USBRX); // PC = (USBTX=TX, USBRX=RX) |
dshin | 0:6489e982d4c9 | 9 | RawSerial ESP(D1, D0); // ESP = (D1=TX, D0=RX) |
dshin | 0:6489e982d4c9 | 10 | DigitalOut ESP_reset_pin(D2); // ESP_reset_pin = D2 |
dshin | 0:6489e982d4c9 | 11 | |
dshin | 0:6489e982d4c9 | 12 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 13 | |
dshin | 0:6489e982d4c9 | 14 | char ESP_recv_buffer[1028]; // ESP receive buffer |
dshin | 0:6489e982d4c9 | 15 | int ESP_recv_buffer_index; // ESP receive buffer index |
dshin | 0:6489e982d4c9 | 16 | |
dshin | 0:6489e982d4c9 | 17 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 18 | // ISR for redirecting PC RX to ESP TX |
dshin | 0:6489e982d4c9 | 19 | |
dshin | 0:6489e982d4c9 | 20 | void ISR_PC_to_ESP() |
dshin | 0:6489e982d4c9 | 21 | { |
dshin | 0:6489e982d4c9 | 22 | while(PC.readable()) { |
dshin | 0:6489e982d4c9 | 23 | ESP.putc(PC.getc()); |
dshin | 0:6489e982d4c9 | 24 | } |
dshin | 0:6489e982d4c9 | 25 | } |
dshin | 0:6489e982d4c9 | 26 | |
dshin | 0:6489e982d4c9 | 27 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 28 | // ISR for redirecting ESP RX to PC TX |
dshin | 0:6489e982d4c9 | 29 | |
dshin | 0:6489e982d4c9 | 30 | void ISR_ESP_to_PC() |
dshin | 0:6489e982d4c9 | 31 | { |
dshin | 0:6489e982d4c9 | 32 | while(ESP.readable()) { |
dshin | 0:6489e982d4c9 | 33 | PC.putc(ESP.getc()); |
dshin | 0:6489e982d4c9 | 34 | } |
dshin | 0:6489e982d4c9 | 35 | } |
dshin | 0:6489e982d4c9 | 36 | |
dshin | 0:6489e982d4c9 | 37 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 38 | // ISR for redirecting ESP RX to ESP_recv_buffer[] |
dshin | 0:6489e982d4c9 | 39 | |
dshin | 0:6489e982d4c9 | 40 | void ISR_ESP_to_recv_buffer() |
dshin | 0:6489e982d4c9 | 41 | { |
dshin | 0:6489e982d4c9 | 42 | while(ESP.readable()) { |
dshin | 0:6489e982d4c9 | 43 | ESP_recv_buffer[ESP_recv_buffer_index++] = ESP.getc(); |
dshin | 0:6489e982d4c9 | 44 | } |
dshin | 0:6489e982d4c9 | 45 | } |
dshin | 0:6489e982d4c9 | 46 | |
dshin | 0:6489e982d4c9 | 47 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 48 | // Reset ESP and wait for 1 second |
dshin | 0:6489e982d4c9 | 49 | |
dshin | 0:6489e982d4c9 | 50 | void ESP_reset(void) |
dshin | 0:6489e982d4c9 | 51 | { |
dshin | 0:6489e982d4c9 | 52 | ESP_reset_pin = 0; |
dshin | 0:6489e982d4c9 | 53 | ESP_reset_pin = 1; |
dshin | 0:6489e982d4c9 | 54 | thread_sleep_for(1000); |
dshin | 0:6489e982d4c9 | 55 | } |
dshin | 0:6489e982d4c9 | 56 | |
dshin | 0:6489e982d4c9 | 57 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 58 | // Setup ESP echo/noecho mode |
dshin | 0:6489e982d4c9 | 59 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 60 | |
dshin | 0:6489e982d4c9 | 61 | void ESP_echo(void) |
dshin | 0:6489e982d4c9 | 62 | { |
dshin | 0:6489e982d4c9 | 63 | NodeMCU_PGM uart_setup_echo = { |
dshin | 0:6489e982d4c9 | 64 | "uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 1)\r\n", 1, |
dshin | 0:6489e982d4c9 | 65 | }; |
dshin | 0:6489e982d4c9 | 66 | |
dshin | 0:6489e982d4c9 | 67 | ESP_call_single(uart_setup_echo); |
dshin | 0:6489e982d4c9 | 68 | } |
dshin | 0:6489e982d4c9 | 69 | |
dshin | 0:6489e982d4c9 | 70 | void ESP_noecho(void) |
dshin | 0:6489e982d4c9 | 71 | { |
dshin | 0:6489e982d4c9 | 72 | NodeMCU_PGM uart_setup_noecho = { |
dshin | 0:6489e982d4c9 | 73 | "uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0)\r\n", 1, |
dshin | 0:6489e982d4c9 | 74 | }; |
dshin | 0:6489e982d4c9 | 75 | |
dshin | 0:6489e982d4c9 | 76 | ESP_call_single(uart_setup_noecho); |
dshin | 0:6489e982d4c9 | 77 | } |
dshin | 0:6489e982d4c9 | 78 | |
dshin | 0:6489e982d4c9 | 79 | // ====================================================================== |
dshin | 0:6489e982d4c9 | 80 | // Send NodeMCU_PGM to ESP and execute |
dshin | 0:6489e982d4c9 | 81 | |
dshin | 0:6489e982d4c9 | 82 | char *ESP_call_single(NodeMCU_PGM pgm) |
dshin | 0:6489e982d4c9 | 83 | { |
dshin | 0:6489e982d4c9 | 84 | ESP_recv_buffer_index = 0; |
dshin | 0:6489e982d4c9 | 85 | ESP.attach(&ISR_ESP_to_recv_buffer, Serial::RxIrq); |
dshin | 0:6489e982d4c9 | 86 | ESP.printf("%s\r\n", pgm.code); |
dshin | 0:6489e982d4c9 | 87 | thread_sleep_for((pgm.delay) * 100); |
dshin | 0:6489e982d4c9 | 88 | ESP.attach(NULL, Serial::RxIrq); |
dshin | 0:6489e982d4c9 | 89 | ESP_recv_buffer[ESP_recv_buffer_index] = '\0'; |
dshin | 0:6489e982d4c9 | 90 | return ESP_recv_buffer; |
dshin | 0:6489e982d4c9 | 91 | } |
dshin | 0:6489e982d4c9 | 92 | |
dshin | 0:6489e982d4c9 | 93 | void ESP_call_multi(NodeMCU_PGM pgms[]) |
dshin | 0:6489e982d4c9 | 94 | { |
dshin | 0:6489e982d4c9 | 95 | int i; |
dshin | 0:6489e982d4c9 | 96 | char *p; |
dshin | 0:6489e982d4c9 | 97 | |
dshin | 0:6489e982d4c9 | 98 | for(i = 0; pgms[i].code != NULL; i++) { |
dshin | 0:6489e982d4c9 | 99 | PC.printf("%s\r\n", pgms[i].code); |
dshin | 0:6489e982d4c9 | 100 | p = ESP_call_single(pgms[i]); |
dshin | 0:6489e982d4c9 | 101 | PC.printf("%s", p); |
dshin | 0:6489e982d4c9 | 102 | } |
dshin | 0:6489e982d4c9 | 103 | } |
dshin | 0:6489e982d4c9 | 104 | |
dshin | 0:6489e982d4c9 | 105 | // ====================================================================== |