Dependents:   lab07-simple-timer poo_dino_game tset5 Esp_sendrecv_copy

Committer:
dshin
Date:
Mon May 23 05:19:52 2022 +0000
Revision:
0:11487122965a
ESP-call

Who changed what in which revision?

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