|
|
@ -1,3 +1,5 @@ |
|
|
|
#include "driver/gpio.h" |
|
|
|
#include "driver/timer.h" |
|
|
|
#include "esp_log.h" |
|
|
|
#include "esp_system.h" |
|
|
|
#include "freertos/FreeRTOS.h" |
|
|
@ -5,33 +7,76 @@ |
|
|
|
#include "freertos/task.h" |
|
|
|
#include "nvs_flash.h" |
|
|
|
#include "string.h" |
|
|
|
#include "driver/gpio.h" |
|
|
|
// |
|
|
|
#include "ble_spp_server_demo.h" |
|
|
|
#include "motor_drive.h" |
|
|
|
|
|
|
|
#define ble_uart_tx_size 128 |
|
|
|
#define ble_uart_rx_size 128 |
|
|
|
|
|
|
|
#define Electric_relay1 25 |
|
|
|
#define Electric_relay2 26 |
|
|
|
static uint8_t bluetooth_tx_buffer[ble_uart_tx_size] = {0}; |
|
|
|
static uint8_t bluetooth_rx_buffer[ble_uart_rx_size] = {0}; |
|
|
|
|
|
|
|
#define GPIO_OUTPUT_PIN_SEL ((1ULL << Electric_relay1) | (1ULL << Electric_relay2)) |
|
|
|
uint8_t ble_rx_buffer_now_len = 0; |
|
|
|
uint8_t ble_rx_buffer_off = 0; |
|
|
|
uint32_t start_time = 0; |
|
|
|
uint16_t modbus_uart_rx_off_before = 0; |
|
|
|
|
|
|
|
void gpio_rgb_init() { |
|
|
|
gpio_config_t gpio_grb_led_structer; |
|
|
|
bleuart_t ble_uart_init_struct = { |
|
|
|
.txbuf = bluetooth_tx_buffer, |
|
|
|
.txbufsize = sizeof(bluetooth_tx_buffer), |
|
|
|
.rxbuf = bluetooth_rx_buffer, |
|
|
|
.rxbufsize = sizeof(bluetooth_rx_buffer), |
|
|
|
.rxpacketReceiveOvertime = 200, |
|
|
|
.receive_data_processing_flag = false, |
|
|
|
.maxClientNum = 1, |
|
|
|
.bleName = "yimei_ble", |
|
|
|
}; |
|
|
|
|
|
|
|
gpio_grb_led_structer.intr_type = GPIO_INTR_DISABLE; |
|
|
|
gpio_grb_led_structer.mode = GPIO_MODE_OUTPUT; |
|
|
|
gpio_grb_led_structer.pin_bit_mask = GPIO_OUTPUT_PIN_SEL; |
|
|
|
gpio_grb_led_structer.pull_down_en = 0; |
|
|
|
gpio_grb_led_structer.pull_up_en = 0; |
|
|
|
void blerxcb(uint8_t *rxmessage, size_t rxsize) { |
|
|
|
if ((rxsize + ble_rx_buffer_now_len) > ble_uart_init_struct.rxbufsize) { |
|
|
|
ESP_LOGW("MAIN", "rx buffer overstep"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
for (int i = 0; i < rxsize; i++) { |
|
|
|
ble_uart_init_struct.rxbuf[ble_rx_buffer_now_len++] = rxmessage[i]; |
|
|
|
ble_rx_buffer_off++; |
|
|
|
start_time = esp_log_timestamp(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
gpio_config(&gpio_grb_led_structer); |
|
|
|
void buffer_all_init() { |
|
|
|
ble_rx_buffer_now_len = 0; |
|
|
|
memset(ble_uart_init_struct.rxbuf, 0, ble_uart_init_struct.rxbufsize); |
|
|
|
} |
|
|
|
|
|
|
|
void wait_ble_uart_receive_ms(uint16_t wait_time_ms) { |
|
|
|
start_time = esp_log_timestamp(); |
|
|
|
while ((esp_log_timestamp() - start_time) < wait_time_ms) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void app_main(void) { |
|
|
|
// ble_spp_server_demo_app_main(); |
|
|
|
gpio_rgb_init(); |
|
|
|
ble_spp_server_demo_app_main(&ble_uart_init_struct); |
|
|
|
bleuart_reg_cb(blerxcb); |
|
|
|
|
|
|
|
while (true) { |
|
|
|
if (ble_rx_buffer_off != 0) { |
|
|
|
modbus_uart_rx_off_before = ble_rx_buffer_off; |
|
|
|
|
|
|
|
wait_ble_uart_receive_ms(100); |
|
|
|
|
|
|
|
gpio_set_level(Electric_relay1,0); |
|
|
|
gpio_set_level(Electric_relay2,0); |
|
|
|
if (ble_rx_buffer_off == modbus_uart_rx_off_before) { |
|
|
|
ble_uart_init_struct.receive_data_processing_flag = true; |
|
|
|
ESP_LOGI("MAIN", "%s", ble_uart_init_struct.rxbuf); |
|
|
|
} |
|
|
|
|
|
|
|
return; |
|
|
|
if (ble_uart_init_struct.receive_data_processing_flag == true) { |
|
|
|
buffer_all_init(); |
|
|
|
ble_uart_init_struct.receive_data_processing_flag = false; |
|
|
|
ble_rx_buffer_off = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |