esp32wroom led,串口通信

esp32调试

#if 0//led_t
/* Blink Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "led_strip.h"
#include "sdkconfig.h"

#define CONFIG_BLINK_GPIO 25

static const char *TAG = "example";

/* Use project configuration menu (idf.py menuconfig) to choose the GPIO to blink,
   or you can edit the following line and set a number here.
*/
#define BLINK_GPIO CONFIG_BLINK_GPIO

static uint8_t s_led_state = 0;

#ifdef CONFIG_BLINK_LED_RMT
static led_strip_t *pStrip_a;

static void blink_led(void)
{
    /* If the addressable LED is enabled */
    if (s_led_state) {
        /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */
        pStrip_a->set_pixel(pStrip_a, 0, 16, 16, 16);
        /* Refresh the strip to send data */
        pStrip_a->refresh(pStrip_a, 100);
    } else {
        /* Set all LED off to clear all pixels */
        pStrip_a->clear(pStrip_a, 50);
    }
}

static void configure_led(void)
{
    ESP_LOGI(TAG, "Example configured to blink addressable LED!");
    /* LED strip initialization with the GPIO and pixels number*/
    pStrip_a = led_strip_init(CONFIG_BLINK_LED_RMT_CHANNEL, BLINK_GPIO, 1);
    /* Set all LED off to clear all pixels */
    pStrip_a->clear(pStrip_a, 50);
}

#elif CONFIG_BLINK_LED_GPIO

static void blink_led(void)
{
    /* Set the GPIO level according to the state (LOW or HIGH)*/
    gpio_set_level(BLINK_GPIO, s_led_state);
}

static void configure_led(void)
{
    ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
    gpio_reset_pin(BLINK_GPIO);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}

#endif

void app_main(void)
{

    /* Configure the peripheral according to the LED type */
    configure_led();

    while (1) {
        ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF");
        blink_led();
        /* Toggle the LED state */
        s_led_state = !s_led_state;
        vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
    }
}

#endif

#if 0   // 简单收发
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#include "driver/timer.h"
#include "esp_timer.h"
#include "driver/uart.h"

#define TXD1_PIN (GPIO_NUM_17) //串口1的发送数据引脚
#define RXD1_PIN (GPIO_NUM_16) //串口1的接收数据引脚
#define BUF_SIZE (1024) //接收数据缓存大小,该大小需要大于内部FIFO大小:UART_FIFO_LEN(128)
/*串口任务*/
static void uart_task(void *arg)
{
    /*配置串口参数*/
    uart_config_t uart_config = {
        .baud_rate = 115200,//波特率
        .data_bits = UART_DATA_8_BITS,//数据位8位
        .parity    = UART_PARITY_DISABLE,//无奇偶校验
        .stop_bits = UART_STOP_BITS_1,//停止位1位
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,//不使用硬件流控
        .source_clk = UART_SCLK_APB,//串口使用的时钟
    };
    /*初始化串口1*/
    uart_driver_install(UART_NUM_1, 
        BUF_SIZE, //串口1接收缓存大小
        0,//100, //不使用发送缓存(发送数据的时候便会阻塞发送)
        0, //队列大小为0;没有使用freertos内部缓存管理
        NULL, //不使用QueueHandle_t 内部缓存管理,设置为空
        0 //设置串口中断优先级,设置为0意味着让系统从1-3级中自动选择一个
    );
    /*设置串口参数*/
    uart_param_config(UART_NUM_1, &uart_config);
    /*设置串口的TX,RX,RTS,DTR引脚*/             //不使用RTS,DTR
    uart_set_pin(UART_NUM_1, TXD1_PIN, RXD1_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    /*申请一块内存,用于临时存储接收的数据*/
    uint8_t *data = (uint8_t *) malloc(BUF_SIZE);
    while (1) {
        //接收串口数据                                         //每隔10ms判断一次,可以写成portMAX_DELAY(一直判断)
        int len = uart_read_bytes(UART_NUM_1, data, BUF_SIZE, 10 / portTICK_RATE_MS);
        //把接收的数据发送出去
        uart_write_bytes(UART_NUM_1, (const char *) data, len);
    }
}
void app_main(void)
{
    xTaskCreate(uart_task, "uart_task", 2048, NULL, 10, NULL);
}


#endif

#if  1   //带消息队列的收发
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#include "driver/timer.h"
#include "esp_timer.h"
#include "driver/uart.h"

#define TXD1_PIN (GPIO_NUM_17) //串口1的发送数据引脚
#define RXD1_PIN (GPIO_NUM_16) //串口1的接收数据引脚
#define BUF_SIZE (1024) //接收数据缓存大小,该大小需要大于内部FIFO大小:UART_FIFO_LEN(128)

#define BUF_SEND_SIZE (1024) //发送数据缓存大小,该大小需要大于内部FIFO大小:UART_FIFO_LEN(128)


static QueueHandle_t QueueHandle_t_uart1;

/*串口任务*/
static void uart_task(void *arg)
{
    /*配置串口参数*/
    uart_config_t uart_config = {
        .baud_rate = 115200,//波特率
        .data_bits = UART_DATA_8_BITS,//数据位8位
        .parity    = UART_PARITY_DISABLE,//无奇偶校验
        .stop_bits = UART_STOP_BITS_1,//停止位1位
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,//不使用硬件流控
        .source_clk = UART_SCLK_APB,//串口使用的时钟
    };
    /*初始化串口1*/
    uart_driver_install(UART_NUM_1, 
        BUF_SIZE, //串口1接收缓存大小
        BUF_SEND_SIZE, //串口1发送缓存大小
        10, //队列大小为10
        &QueueHandle_t_uart1, //缓存管理
        0 //设置串口中断优先级,设置为0意味着让系统从1-3级中自动选择一个
    );
    /*设置串口参数*/
    uart_param_config(UART_NUM_1, &uart_config);
    /*设置串口的TX,RX,RTS,DTR引脚*/             //不使用RTS,DTR
    uart_set_pin(UART_NUM_1, TXD1_PIN, RXD1_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);

    /*申请一块内存,用于临时存储接收的数据*/
    uint8_t *data = (uint8_t *) malloc(BUF_SIZE);
    uart_event_t event;
    while (1) {
        if(xQueueReceive(QueueHandle_t_uart1, (void * )&event, portMAX_DELAY))
        {
            switch(event.type) {
                case UART_DATA://接收到数据
                    //读取接收的数据
                    uart_read_bytes(UART_NUM_1, data, event.size, portMAX_DELAY);
                    //返回接收的数据
                    uart_write_bytes(UART_NUM_1, (const char*) data, event.size);
                    break;
                case UART_FIFO_OVF://FIFO溢出(建议加上数据流控制)
                    uart_flush_input(UART_NUM_1);
                    xQueueReset(QueueHandle_t_uart1);
                    break;
                case UART_BUFFER_FULL://接收缓存满(建议加大缓存 BUF_SIZE)
                    uart_flush_input(UART_NUM_1);
                    xQueueReset(QueueHandle_t_uart1);
                    break;
                case UART_BREAK://检测到接收数据中断
                    break;
                case UART_PARITY_ERR://数据校验错误
                    break;
                case UART_FRAME_ERR://数据帧错误
                    break;
                case UART_PATTERN_DET://接收到相匹配的字符(没用到)
                    break;
                default:
                    break;
            }
        }
    }
    free(data);
    data = NULL;
    vTaskDelete(NULL);
}
void app_main(void)
{
    xTaskCreate(uart_task, "uart_task", 2048, NULL, 10, NULL);
}

#endif
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ESP32-WROOM-32和ESP32-WROOM-32E是ESP32系列芯片的两种不同型号。 它们之间最大的不同是在内置的天线上。ESP32-WROOM-32E采用了一种新型的PCB天线设计,使其具有更好的天线性能和抗干扰能力。除此之外,它们的其他硬件规格和功能都是相同的,都支持蓝牙、Wi-Fi等无线通信协议。 需要注意的是,由于ESP32-WROOM-32E采用了不同的天线设计,因此其尺寸和外形也略微不同于ESP32-WROOM-32。因此,在使用这两种芯片时,需要注意它们的物理尺寸和引脚定义是否相同,以免因此导致系统兼容性问题。 ### 回答2: ESP32-WROOM-32和ESP32-WROOM-32E都是由Espressif Systems开发的低功耗Wi-Fi和蓝牙SoC模块,主要用于物联网和无线通信应用。下面是ESP32-WROOM-32和ESP32-WROOM-32E之间的异同点: 1. 芯片外观:ESP32-WROOM-32和ESP32-WROOM-32E在外观上非常相似,具有相同的尺寸和引脚布局,因此可以方便地进行替换。 2. 芯片功能:两个模块都基于ESP32系列芯片,具有双核处理器、Wi-Fi和蓝牙功能,并支持多个通信协议(如TCP/IP、UDP、HTTP、MQTT等)。 3. 内置天线:ESP32-WROOM-32和ESP32-WROOM-32E都具有内置天线,可提供可靠的无线通信性能。 4. 功耗:在功耗方面,ESP32-WROOM-32E在某些模式下具有更低的功耗,例如在停机模式下,ESP32-WROOM-32E消耗的电流更低,可以提供更长的电池寿命。 5. Flash容量:ESP32-WROOM-32具有4MB的Flash存储器,而ESP32-WROOM-32E则具有8MB的Flash存储器。因此,前者适用于一些简单应用,而后者更适用于存储更多数据的应用。 6. 价格:由于ESP32-WROOM-32E具有更大的Flash容量,所以相对来说它的价格可能会稍高一些。 总的来说,ESP32-WROOM-32和ESP32-WROOM-32E在大部分功能上是相似的,主要的区别在于功耗和Flash容量。选择哪种模块最适合取决于具体应用需求和预算。 ### 回答3: ESP32-WROOM-32和ESP32-WROOM-32E是乐鑫(Espressif)公司推出的两款WiFi和蓝牙双模芯片模块,它们在一些方面存在一些异同点。 相同点: 1. 芯片型号:它们都采用了ESP32芯片作为主控芯片,具有双核32位处理器、WiFi和蓝牙功能。 2. 封装形式:它们均以模块的形式出现,便于集成到各种硬件设备中。 3. 尺寸规格:它们的尺寸规格也是一致的,都采用了标准的WROOM封装,便于与其他外设进行连线。 4. 外设接口:它们提供了一系列的通用IO口、UART串口、SPI、I2C、SD卡等接口,方便连接各种外部硬件。 异点: 1. 蓝牙版本:ESP32-WROOM-32采用了蓝牙4.2版本,而ESP32-WROOM-32E采用了更新的蓝牙5.0版本,后者具备更好的性能和更强的兼容性。 2. 射频功率:ESP32-WROOM-32E的射频功率比ESP32-WROOM-32略低,前者的射频功率在13 dBm左右,后者在17 dBm左右,可能会影响在某些环境下的无线信号覆盖范围。 3. Flash存储容量:ESP32-WROOM-32E的Flash存储容量比ESP32-WROOM-32更大,前者为4MB,可以存储更多的用户程序和数据。 总的来说,ESP32-WROOM-32和ESP32-WROOM-32E是非常相似的芯片模块,主要在蓝牙版本、射频功率和Flash存储容量等方面存在一些差异。用户在选择时可以根据具体需求来选择合适的芯片模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值