esp32例子初始化流程

esp32之freertos

    既然用了操作系统,那很明显就是多线程(多任务)啦,而BLE来说,最少需要两个线程
controller层与host层两个线程处理,所以在主线程中会把这两个给初始化了。
    由于没有找到源码细节,所以这是我猜的,根据nrf52832开源的协议栈nimble猜的,
他就是这种方式处理的。

流程

app_main()中的初始化

依次初始化 外设、controller层 host层,然后设置。

void app_main(void)
{   //外设
    ESP_ERROR_CHECK(nvs_flash_init());
    ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT));
    esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
    
    
    //controller层
    esp_bt_controller_init(&bt_cfg);
    esp_bt_controller_enable(ESP_BT_MODE_BLE);
	
	
	//host层
    esp_eddystone_init();
	
    
    //设置BLE
    /*<! set scan parameters */
    esp_ble_gap_set_scan_params(&ble_scan_params);
}

host层初始化函数
	void esp_eddystone_init(void)
{	//bluedroid初始化
    esp_bluedroid_init();
    //bluedroid使能
    esp_bluedroid_enable();
    //注册回调函数
    esp_eddystone_appRegister();
}

main线程自删除

在这里插入图片描述

ESP32是一款基于Espressif Systems ESP8266平台的增强型Wi-Fi/蓝牙SoC芯片,它支持MQTT(Message Queuing Telemetry Transport)协议,这是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)应用中。 在ESP32初始化MQTT通常需要以下几个步骤: 1. **库导入**: 首先,你需要包含`esp_mqtt.h`头文件,这是ESP32提供的mqtt SDK的一部分。 ```c #include <esp_mqtt.h> ``` 2. **网络配置**: 确保已经连接到WiFi网络,并配置好必要的网络参数,如服务器地址(`server_ip`)、端口(`port`)等。 ```c const char* ssid = "your_wifi_ssid"; const char* password = "your_wifi_password"; const char* server_ip = "your_mqtt_server_address"; const int port = MQTT_DEFAULT_PORT; ``` 3. **MQTT初始化**: 创建一个`esp_mqtt_client_config_t`结构体并设置相关参数,然后创建`esp_mqtt_client_t`实例。 ```c esp_mqtt_client_config_t mqtt_cfg = { .uri = "tcp://" server_ip, .username = "your_username", .password = "your_password", .keepalive = 60, .event_handler = &mqtt_event_handler // 自定义事件处理器 }; esp_err_t err = esp_mqtt_init(&mqtt_cfg); if (err != ESP_OK) { // 处理错误 } esp_mqtt_client_t* client = esp_mqtt_new_default(); ``` 4. **连接和认证**: 使用`esp_mqtt_connect()`函数尝试连接到MQTT服务器并进行身份验证。 ```c esp_err_t conn_ret = esp_mqtt_connect(client); if (conn_ret == ESP_OK) { // 连接成功,开始监听消息 } else { // 处理连接失败 } ``` 5. **订阅主题**(如果需要): 使用`esp_mqtt_subscribe()`订阅感兴趣的主题。 ```c esp_err_t sub_ret = esp_mqtt_subscribe(client, topic, 1, NULL); // 第二个参数是QoS等级 ``` 6. **断开连接**(程序结束前记得关闭连接): 当不再需要MQTT服务时,调用`esp_mqtt_destroy()`释放资源。 ```c esp_err_t disconnect_ret = esp_mqtt_disconnect(client); esp_mqtt_destroy(client); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值