我是靠谱客的博主 专注舞蹈,这篇文章主要介绍树莓派外挂ESP32-放弃硬件的2根线,现在分享给大家,希望可以做个参考。

研究关键指令 hciattach
pi:
root@raspberrypi:/# find -name hciattach
./usr/share/bash-completion/completions/hciattach
./usr/bin/hciattach
其实第一个是文件 读一读 读不懂

sudo hciattach -n -s 115200 /dev/serial0 any 115200 flow
http://www.voidcn.com/article/p-minmxows-rr.html
看到这句话
if (!strcmp("flow", argv[optind]))

u->flags|= FLOW_CTL;    //uart flag 流控制标志

else

u->flags&= ~FLOW_CTL;

那么
sudo hciattach -s 115200 /dev/serial0 any 115200 flow
sudo hciattach -s 115200 /dev/serial0 any 115200 noflow nosleep 
也就是前者需要硬件控制
后面不需要硬件控制

前者需要4根线RXTX硬件TXRX
后者可以不要硬件的2根线 但是需要修改固件代码
如下

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* * app_main.c * * Created on: 2020-02-01 23:25 * Author: Jack Chen <redchenjs@live.com> */ #include "esp_bt.h" #include "esp_log.h" #include "nvs_flash.h" #include "driver/uart.h" #include "soc/uhci_periph.h" #include "driver/periph_ctrl.h" #define TAG "uart_hci" #define HCI_UART_PORT (1) #define BUF_SIZE (1024*4) #if HCI_UART_PORT == 0 #define HCI_UART_TXD (1) #define HCI_UART_RXD (3) #define HCI_UART_RTS (-1) #define HCI_UART_CTS (-1) #elif HCI_UART_PORT == 1 #define HCI_UART_TXD (5) #define HCI_UART_RXD (18) #define HCI_UART_RTS (-1) #define HCI_UART_CTS (-1) #endif void reconfig_hci_uart() { /* Configure parameters of an UART driver, * communication pins and install the driver */ uart_config_t uart_config = { .baud_rate = 115200,//460800 该函式之前全部是115200 .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .source_clk = UART_SCLK_APB, }; int intr_alloc_flags = 0; ESP_ERROR_CHECK(uart_driver_delete(HCI_UART_PORT)); ESP_ERROR_CHECK(uart_driver_install(HCI_UART_PORT, BUF_SIZE, 0, 0, NULL, intr_alloc_flags)); ESP_ERROR_CHECK(uart_param_config(HCI_UART_PORT, &uart_config)); ESP_ERROR_CHECK(uart_set_pin(HCI_UART_PORT, HCI_UART_TXD, HCI_UART_RXD, HCI_UART_RTS, HCI_UART_CTS)); #if ((HCI_UART_RTS == -1) || (HCI_UART_CTS == -1)) ESP_ERROR_CHECK(uart_set_hw_flow_ctrl(HCI_UART_PORT, UART_HW_FLOWCTRL_DISABLE, UART_FIFO_LEN - 8)); #endif } int app_main(void) { esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); periph_module_enable(PERIPH_UART1_MODULE); periph_module_enable(PERIPH_UHCI0_MODULE); //ESP_ERROR_CHECK(uart_set_pin(UART_NUM_1, 5, 18, -1, -1)); esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); bt_cfg.hci_uart_baudrate = 115200; ESP_LOGI(TAG, "before%d", bt_cfg.mode); bt_cfg.mode = 1; ESP_LOGI(TAG, "after%d", bt_cfg.mode); ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT)); ESP_ERROR_CHECK(esp_bt_controller_init(&bt_cfg)); reconfig_hci_uart(); ESP_ERROR_CHECK(esp_bt_controller_enable(ESP_BT_MODE_BLE)); ESP_LOGI(TAG, "DONE::%d bps, tx: 5, rx: 18, rts: 19, cts: 23", bt_cfg.hci_uart_baudrate); return 0; }

最后

以上就是专注舞蹈最近收集整理的关于树莓派外挂ESP32-放弃硬件的2根线的全部内容,更多相关树莓派外挂ESP32-放弃硬件内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部