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