.. _Driver-AT: [ESP32 & ESP32-S2 & ESP32-C3] 驱动 AT 命令 ================================================ :link_to_translation:`en:[English]` - :ref:`AT+DRVADC <cmd-DRVADC>`ï¼šè¯»å– ADC 通é“值 - :ref:`AT+DRVPWMINIT <cmd-DRVPWMINIT>`:åˆå§‹åŒ– PWM 驱动器 - :ref:`AT+DRVPWMDUTY <cmd-DRVPWMDUTY>`:设置 PWM å 空比 - :ref:`AT+DRVPWMFADE <cmd-DRVPWMFADE>`:设置 PWM æ¸å˜ - :ref:`AT+DRVI2CINIT <cmd-DRVI2CINIT>`:åˆå§‹åŒ– I2C 主机驱动 - :ref:`AT+DRVI2CRD <cmd-DRVI2CRD>`ï¼šè¯»å– I2C æ•°æ® - :ref:`AT+DRVI2CWRDATA <cmd-DRVI2CWRDATA>`:写入 I2C æ•°æ® - :ref:`AT+DRVI2CWRBYTES <cmd-DRVI2CWRBYTES>`:写入ä¸è¶…过 4 å—节的 I2C æ•°æ® - :ref:`AT+DRVSPICONFGPIO <cmd-DRVSPICONFGPIO>`:é…ç½® SPI GPIO - :ref:`AT+DRVSPIINIT <cmd-DRVSPIINIT>`:åˆå§‹åŒ– SPI 主机驱动 - :ref:`AT+DRVSPIRD <cmd-DRVSPIRD>`ï¼šè¯»å– SPI æ•°æ® - :ref:`AT+DRVSPIWR <cmd-DRVSPIWR>`:写入 SPI æ•°æ® .. _cmd-DRVADC: :ref:`AT+DRVADC <Driver-AT>`ï¼šè¯»å– ADC 通é“值 -------------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVADC=<channel>,<atten> **å“应:** :: +DRVADC:<raw data> OK 傿•° ^^^^ - **<channel>**:ADC1 通é“,范围:0 ~ 7ï¼Œç›¸åº”ç®¡è„šè¯·æŸ¥çœ‹æŠ€æœ¯è§„æ ¼ä¹¦ã€‚ - **<atten>**:衰å‡å€¼ï¼š - 0: 0 dB è¡°å‡ï¼Œæ»¡é‡ç¨‹ç”µåŽ‹ä¸º 1.1 Vï¼› - 1: 2.5 dB è¡°å‡ï¼Œæ»¡é‡ç¨‹ç”µåŽ‹ 1.5 Vï¼› - 2: 6 dB è¡°å‡ï¼Œæ»¡é‡ç¨‹ç”µåŽ‹ä¸º 2.2 Vï¼› - 3: 11 dB è¡°å‡ï¼Œæ»¡é‡ç¨‹ç”µåŽ‹ä¸º 3.9 V。 - **<raw data>**:ADC 通é“值,电压值为 raw_data/2 :sup:`width` * atten。 说明 ^^^^ - ESP-AT åªæ”¯æŒ ADC1。 - ESP32 å’Œ ESP32-C3 æ”¯æŒ 12 ä½å®½åº¦ï¼ŒESP32-S2 åªæ”¯æŒ 13 ä½å®½åº¦ã€‚ 示例 ^^^^ :: AT+DRVADC=0,0 // ADC1 0 通é“,电压:0 ~ 1.1 V +DRVADC:2048 // ESP32 å’Œ ESP32-C3 的电压为 2048 / 4096 * 1.1 = 0.55 // ESP32-S2 的电压为 2048 / 8192 * 1.1 = 0.264 OK .. _cmd-DRVPWMINIT: :ref:`AT+DRVPWMINIT <Driver-AT>`:åˆå§‹åŒ– PWM 驱动器 ---------------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVPWMINIT=<freq>,<duty_res>,<ch0_gpio>[,...,<ch3_gpio>] **å“应:** :: OK 傿•° ^^^^ - **<freq>**:LEDC 定时器频率,å•ä½ï¼šHz,范围:1 Hz ~ 8 MHz。 - **<duty_res>**:LEDC 通é“å 空比分辨率,范围:0 ~ 20 ä½ã€‚ - **<chx_gpio>**:LEDC é€šé“ x 的输出 GPIO。例如,如果您想将 GPIO16 ä½œä¸ºé€šé“ 0,需设置 ``<ch0_gpio>`` 为 16。 说明 ^^^^ - ESP-AT æœ€å¤šèƒ½æ”¯æŒ 4 个通é“。 - 使用本命令åˆå§‹åŒ–çš„é€šé“æ•°é‡ç›´æŽ¥å†³å®šäº†å…¶å®ƒ PWM 命令(如 :ref:`AT+DRVPWMDUTY <cmd-DRVPWMDUTY>` å’Œ :ref:`AT+DRVPWMFADE <cmd-DRVPWMFADE>`)能够设置的通é“。例如,如果您åªåˆå§‹åŒ–了两个通é“,那么 ``AT+DRVPWMDUTY`` 命令åªèƒ½ç”¨æ¥æ›´æ”¹è¿™ä¸¤ä¸ªé€šé“çš„ PWM å 空比。 - 频率和å 空比分辨率相互影å“。更多信æ¯è¯·è§ `频率和å 空比分辨率支æŒèŒƒå›´ <https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s2/api-reference/peripherals/ledc.html#ledc-api-supported-range-frequency-duty-resolution>`_。 示例 ^^^^ :: AT+DRVPWMINIT=5000,13,17,16,18,19 // 设置 4 个通é“,频率为 5 kHz,å 空比分辨率为 13 ä½ AT+DRVPWMINIT=10000,10,17 // åªåˆå§‹åŒ–é€šé“ 0,频率为 10 kHz,å 空比分辨率为 10 ä½ï¼Œå…¶å®ƒ PWM 相关命令åªèƒ½è®¾ç½®ä¸€ä¸ªé€šé“ .. _cmd-DRVPWMDUTY: :ref:`AT+DRVPWMDUTY <Driver-AT>`:设置 PWM å 空比 ------------------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVPWMDUTY=<ch0_duty>[,...,<ch3_duty>] **å“应:** :: OK 傿•° ^^^^ - **<duty>**:LEDC 通é“å 空比,范围:[0,2 :sup:`å 空比分辨率`]。 说明 ^^^^ - ESP-AT æœ€å¤šèƒ½æ”¯æŒ 4 个通é“。 - è‹¥æŸä¸ªé€šé“æ— éœ€è®¾ç½®å 空比,直接çœç•¥è¯¥å‚数。 示例 ^^^^ :: AT+DRVPWMDUTY=255,512 // è®¾ç½®é€šé“ 0 çš„å 空比为 255ï¼Œè®¾ç½®é€šé“ 1 çš„å 空比为 512 AT+DRVPWMDUTY=,,0 // åªè®¾ç½®é€šé“ 2 çš„å 空比为 0 .. _cmd-DRVPWMFADE: :ref:`AT+DRVPWMFADE <Driver-AT>`:设置 PWM æ¸å˜ ----------------------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVPWMFADE=<ch0_target_duty>,<ch0_fade_time>[,...,<ch3_target_duty>,<ch3_fade_time>] **å“应:** :: OK 傿•° ^^^^ - **<target_duty>**ï¼šç›®æ ‡æ¸å˜å 空比,范围:[0,2 :sup:`duty_resolution`–1]。 - **<fade_time>**:æ¸å˜çš„æœ€é•¿æ—¶é—´ï¼Œå•ä½ï¼šæ¯«ç§’。 说明 ^^^^ - ESP-AT æœ€å¤šèƒ½æ”¯æŒ 4 个通é“。 - è‹¥æŸä¸ªé€šé“æ— éœ€è®¾ç½® ``<target_duty>`` å’Œ ``<fade_time>``,直接çœç•¥å³å¯ã€‚ 示例 ^^^^ :: AT+DRVPWMFADE=,,0,1000 // ä½¿ç”¨ä¸€ç§’çš„æ—¶é—´å°†é€šé“ 1 çš„å 空比设置为 0 AT+DRVPWMFADE=1024,1000,0,2000, // ä½¿ç”¨ä¸€ç§’çš„æ—¶é—´å°†é€šé“ 0 çš„å 空比设置为 1024ã€ä¸¤ç§’çš„æ—¶é—´å°†é€šé“ 1 çš„å 空比设为 0 .. _cmd-DRVI2CINIT: :ref:`AT+DRVI2CINIT <Driver-AT>`:åˆå§‹åŒ– I2C 主机驱动 --------------------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVI2CINIT=<num>,<scl_io>,<sda_io>,<clock> **å“应:** :: OK 傿•° ^^^^ - **<num>**:I2C 端å£å·ï¼ŒèŒƒå›´ï¼š0 ~ 1。如果未设置åŽé¢çš„傿•°ï¼ŒAT å°†ä¸åˆå§‹åŒ–该 I2C 端å£ã€‚ - **<scl_io>**:I2C SCL ä¿¡å·çš„ GPIO å·ã€‚ - **<sda_io>**:I2C SDA ä¿¡å·çš„ GPIO å·ã€‚ - **<clock>**:主机模å¼ä¸‹çš„ I2C 时钟频率,å•ä½ï¼šHz,最大值:1 MHz。 说明 ^^^^ - æœ¬æŒ‡ä»¤åªæ”¯æŒ I2C 主机。 示例 ^^^^ :: AT+DRVI2CINIT=0,25,26,1000 // åˆå§‹åŒ– I2C0,SCL:GPIO25,SDA:GPIO26,I2C 时钟频率:1 kHz AT+DRVI2CINIT=0 // å–æ¶ˆ I2C0 åˆå§‹åŒ– .. _cmd-DRVI2CRD: :ref:`AT+DRVI2CRD <Driver-AT>`ï¼šè¯»å– I2C æ•°æ® ------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVI2CRD=<num>,<address>,<length> **å“应:** :: +DRVI2CRD:<read data> OK 傿•° ^^^^ - **<num>**:I2C 端å£å·ï¼ŒèŒƒå›´ï¼š0 ~ 1。 - **<address>**:I2C 从机设备地å€ï¼š - 7 ä½åœ°å€ï¼š0 ~ 0x7Fï¼› - 10 ä½åœ°å€ï¼šç¬¬ä¸€ä¸ªå—节的å‰ä¸ƒä¸ªä½æ˜¯ 1111 0XXï¼Œå…¶ä¸æœ€åŽä¸¤ä½ XX 是 10 ä½åœ°å€çš„æœ€é«˜ä¸¤ä½ã€‚例如,如果 10 ä½åœ°å€ä¸º 0x2FF (b'1011111111),那么输入的地å€ä¸º 0x7AFF (b'111101011111111)。 - **<length>**:I2C æ•°æ®é•¿åº¦ï¼ŒèŒƒå›´ï¼š1 ~ 2048。 - **<read data>**:I2C æ•°æ®ã€‚ 说明 ^^^^ - I2C ä¼ è¾“è¶…æ—¶æ—¶é—´ä¸ºä¸€ç§’ã€‚ 示例 ^^^^ :: AT+DRVI2CRD=0,0x34,1 // I2C0 ä»Žåœ°å€ 0x34 å¤„è¯»å– 1 å—èŠ‚çš„æ•°æ® AT+DRVI2CRD=0,0x7AFF,1 // I2C0 从 10 ä½åœ°å€ 0x2FF å¤„è¯»å– 1 å—èŠ‚çš„æ•°æ® // I2C0 è¯»åœ°å€ 0x34,寄å˜å™¨åœ°å€ 0x27,读 2 å—节 AT+DRVI2CWRBYTES=0,0x34,1,0x27 // I2C0 å…ˆå†™è®¾å¤‡åœ°å€ 0x34ã€å¯„å˜å™¨åœ°å€ 0x27 AT+DRVI2CRD=0,0x34,2 // I2C0 è¯»åœ°å€ 2 å—节 .. _cmd-DRVI2CWRDATA: :ref:`AT+DRVI2CWRDATA <Driver-AT>`:写入 I2C æ•°æ® ------------------------------------------------------ 设置命令 ^^^^^^^^ **命令:** :: AT+DRVI2CWRDATA=<num>,<address>,<length> **å“应:** :: OK > 收到上述å“应åŽï¼Œè¯·è¾“入您想写入的数æ®ï¼Œå½“æ•°æ®è¾¾åˆ°å‚数指定长度åŽï¼Œæ•°æ®ä¼ 输开始。 若数æ®ä¼ 输æˆåŠŸï¼Œåˆ™è¿”å›žï¼š :: OK 若数æ®ä¼ 输失败,则返回: :: ERROR 傿•° ^^^^ - **<num>**:I2C 端å£å·ï¼ŒèŒƒå›´ï¼š0 ~ 1。 - **<address>**:I2C 从机设备地å€ï¼š - 7 ä½åœ°å€ï¼š0 ~ 0x7Fï¼› - 10 ä½åœ°å€ï¼šç¬¬ä¸€ä¸ªå—节的å‰ä¸ƒä¸ªä½æ˜¯ 1111 0XXï¼Œå…¶ä¸æœ€åŽä¸¤ä½ XX 是 10 ä½åœ°å€çš„æœ€é«˜ä¸¤ä½ã€‚例如,如果 10 ä½åœ°å€ä¸º 0x2FF (b'1011111111),那么输入的地å€ä¸º 0x7AFF (b'111101011111111)。 - **<length>**:I2C æ•°æ®é•¿åº¦ï¼ŒèŒƒå›´ï¼š1 ~ 2048。 说明 ^^^^ - I2C ä¼ è¾“è¶…æ—¶æ—¶é—´ä¸ºä¸€ç§’ã€‚ 示例 ^^^^ :: AT+DRVI2CWRDATA=0,0x34,10 // I2C0 写入 10 å—节数æ®è‡³åœ°å€ 0x34 .. _cmd-DRVI2CWRBYTES: :ref:`AT+DRVI2CWRBYTES <Driver-AT>`:写入ä¸è¶…过 4 å—节的 I2C æ•°æ® --------------------------------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVI2CWRBYTES=<num>,<address>,<length>,<data> **å“应:** :: OK 傿•° ^^^^ - **<num>**:I2C 端å£å·ï¼ŒèŒƒå›´ï¼š0 ~ 1。 - **<address>**:I2C 从机设备地å€ã€‚ - 7 ä½åœ°å€ï¼š0 ~ 0x7F。 - 10 ä½åœ°å€ï¼šç¬¬ä¸€ä¸ªå—节的å‰ä¸ƒä¸ªä½æ˜¯ 1111 0XXï¼Œå…¶ä¸æœ€åŽä¸¤ä½ XX 是 10 ä½åœ°å€çš„æœ€é«˜ä¸¤ä½ã€‚例如,如果 10 ä½åœ°å€ä¸º 0x2FF (b'1011111111),那么输入的地å€ä¸º 0x7AFF (b'111101011111111)。 - **<length>**:待写入的 I2C æ•°æ®é•¿åº¦ï¼ŒèŒƒå›´ï¼š1 ~ 4 å—节。 - **<data>**ï¼šå‚æ•° ``<length>`` 指定长度的数æ®ï¼ŒèŒƒå›´ï¼š0 ~ 0xFFFFFFFF。 说明 ^^^^ - I2C ä¼ è¾“è¶…æ—¶æ—¶é—´ä¸ºä¸€ç§’ã€‚ 示例 ^^^^ :: AT+DRVI2CWRBYTES=0,0x34,2,0x1234 // I2C0 写入 2 å—èŠ‚æ•°æ® 0x1234 è‡³åœ°å€ 0x34 AT+DRVI2CWRBYTES=0,0x7AFF,2,0x1234 // I2C0 写入 2 å—èŠ‚æ•°æ® 0x1234 至 10 ä½åœ°å€ 0x2FF // I2C0 å†™åœ°å€ 0x34ã€å¯„å˜å™¨åœ°å€ 0x27,数æ®ä¸º c0xFF AT+DRVI2CWRBYTES=0,0x34,2,0x27FF .. _cmd-DRVSPICONFGPIO: :ref:`AT+DRVSPICONFGPIO <Driver-AT>`:é…ç½® SPI GPIO --------------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVSPICONFGPIO=<mosi>,<miso>,<sclk>,<cs> **å“应:** :: OK 傿•° ^^^^ - **<mosi>**:主出从入信å·å¯¹åº”çš„ GPIO 管脚。 - **<miso>**:主入从出信å·å¯¹åº” GPIO 管脚,若ä¸ä½¿ç”¨ï¼Œç½®ä½ -1。 - **<sclk>**:SPI æ—¶é’Ÿä¿¡å·å¯¹åº”çš„ GPIO 管脚。 - **<cs>**:选择从机的信å·å¯¹åº” GPIO 管脚,若ä¸ä½¿ç”¨ï¼Œç½®ä½ -1。 .. _cmd-DRVSPIINIT: :ref:`AT+DRVSPIINIT <Driver-AT>`:åˆå§‹åŒ– SPI 主机驱动 ---------------------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVSPIINIT=<clock>,<mode>,<cmd_bit>,<addr_bit>,<dma_chan>[,bits_msb] **å“应:** :: OK 傿•° ^^^^ - **<clock>**:时钟速度,分频数为 80 MHz,å•ä½ï¼šHz,最大值:40 MHz。 - **<mode>**:SPI 模å¼ï¼ŒèŒƒå›´ï¼š0 ~ 3。 - **<cmd_bit>**ï¼šå‘½ä»¤é˜¶æ®µçš„é»˜è®¤ä½æ•°ï¼ŒèŒƒå›´ï¼š0 ~ 16。 - **<addr_bit>**:地å€é˜¶æ®µçš„é»˜è®¤ä½æ•°ï¼ŒèŒƒå›´ï¼š0 ~ 64。 - **<dma_chan>**ï¼šé€šé“ 1 或 2,ä¸éœ€è¦ DMA 时也å¯ä¸º 0。 - **<bits_msb>**:SPI æ•°æ®æ ¼å¼ï¼š - bit0: - 0: å…ˆä¼ è¾“ MSB(默认); - 1: å…ˆä¼ è¾“ LSB。 - bit1: - 0: 先接收 MSB(默认); - 1: 先接收 LSB。 说明 ^^^^ - 请在 SPI åˆå§‹åŒ–å‰é…ç½® SPI GPIO。 示例 ^^^^ :: AT+DRVSPIINIT=102400,0,0,0,0,3 // SPI 时钟:100 kHz;模å¼ï¼š0;命令阶段和地å€é˜¶æ®µé»˜è®¤ä½æ•°å‡ä¸º 0ï¼›ä¸ä½¿ç”¨ DMAï¼›å…ˆä¼ è¾“å’ŒæŽ¥æ”¶ LSB OK AT+DRVSPIINIT=0 // åˆ é™¤ SPI 驱动 OK .. _cmd-DRVSPIRD: :ref:`AT+DRVSPIRD <Driver-AT>`ï¼šè¯»å– SPI æ•°æ® ------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVSPIRD=<data_len>[,<cmd>,<cmd_len>][,<addr>,<addr_len>] **å“应:** :: +DRVSPIRD:<read data> OK 傿•° ^^^^ - **<data_len>**:待读å–çš„ SPI æ•°æ®é•¿åº¦ï¼ŒèŒƒå›´ï¼š1 ~ 4092 å—节。 - **<cmd>**:命令数æ®ï¼Œæ•°æ®é•¿åº¦ç”± ``<cmd_len>`` 傿•°è®¾å®šã€‚ - **<cmd_len>**ï¼šæœ¬æ¬¡ä¼ è¾“ä¸çš„命令长度,范围:0 ~ 2 å—节。 - **<addr>**:命令地å€ï¼Œåœ°å€é•¿åº¦ç”± ``<addr_len>`` 傿•°è®¾å®šã€‚ - **<addr_len>**ï¼šæœ¬æ¬¡ä¼ è¾“ä¸åœ°å€é•¿åº¦ï¼ŒèŒƒå›´ï¼š0 ~ 4 å—节。 说明 ^^^^ - è‹¥ä¸ä½¿ç”¨ DMA,``<data_len>`` 傿•°æ¯æ¬¡èƒ½å¤Ÿè®¾å®šçš„æœ€å¤§å€¼ä¸º 64 å—节。 示例 ^^^^ :: AT+DRVSPIRD=2 // è¯»å– 2 å—èŠ‚æ•°æ® +DRVI2CREAD:ffff OK AT+DRVSPIRD=2,0x03,1,0x001000,3 // è¯»å– 2 å—节数æ®ï¼Œ<cmd> 为 0x03,<cmd_len> 为 1 å—节,<addr> 为 0x1000,<addr_len> 为 3 å—节 +DRVI2CREAD:ffff OK .. _cmd-DRVSPIWR: :ref:`AT+DRVSPIWR <Driver-AT>`:写入 SPI æ•°æ® -------------------------------------------------- 设置命令 ^^^^^^^^ **命令:** :: AT+DRVSPIWR=<data_len>[,<cmd>,<cmd_len>][,<addr>,<addr_len>] **å“应:** 当 ``<data_len>`` 傿•°å€¼å¤§äºŽ 0,AT 返回: :: OK > 收到上述å“应åŽï¼Œè¯·è¾“入您想写入的数æ®ï¼Œå½“æ•°æ®è¾¾åˆ°å‚数指定长度åŽï¼Œæ•°æ®ä¼ 输开始。 若数æ®ä¼ 输æˆåŠŸï¼ŒAT 返回: :: OK 当 ``<data_len>`` 傿•°å€¼ä¸º 0 æ—¶ï¼Œä¹Ÿå³ AT åªä¼ 输命令和地å€ï¼Œä¸ä¼ 输 SPI æ•°æ®ï¼Œæ¤æ—¶ AT 返回: :: OK 傿•° ^^^^ - **<data_len>**:SPI æ•°æ®é•¿åº¦ï¼ŒèŒƒå›´ï¼š0 ~ 4092。 - **<cmd>**:命令数æ®ï¼Œæ•°æ®é•¿åº¦ç”± ``<cmd_len>`` 傿•°è®¾å®šã€‚ - **<cmd_len>**ï¼šæœ¬æ¬¡ä¼ è¾“ä¸çš„命令长度,范围:0 ~ 2 å—节。 - **<addr>**:命令地å€ï¼Œåœ°å€é•¿åº¦ç”± ``<addr_len>`` 傿•°è®¾å®šã€‚ - **<addr_len>**ï¼šæœ¬æ¬¡ä¼ è¾“ä¸åœ°å€é•¿åº¦ï¼ŒèŒƒå›´ï¼š0 ~ 4 å—节。 说明 ^^^^ - è‹¥ä¸ä½¿ç”¨ DMA,``<data_len>`` 傿•°æ¯æ¬¡èƒ½å¤Ÿè®¾å®šçš„æœ€å¤§å€¼ä¸º 64 å—节。 示例 ^^^^ :: AT+DRVSPIWR=2 // 写入 2 å—èŠ‚æ•°æ® OK > // å¼€å§‹æŽ¥æ”¶ä¸²è¡Œæ•°æ® OK AT+DRVSPIWR=0,0x03,1,0x001000,3 // 写入 0 å—节数æ®ï¼Œ<cmd> 为 0x03,<cmd_len> 为 1 å—节,<addr> 为 0x1000,<addr_len> 为 3 å—节 OK