The final project of Embedde class.

ESP-call.cpp

Committer:
pkr7098
Date:
2021-06-03
Revision:
1:c51792ac72d6
Parent:
0:6489e982d4c9

File content as of revision 1:c51792ac72d6:

// ======================================================================

#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[2049];         // 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);
    }
}

// ======================================================================