乐鑫技术交流
直播中

陈文博

8年用户 955经验值
擅长:测量仪表
私信 关注
[问答]

ESP-12 ESP8266如何通过I2C将SSID和RSSI信息发送到RPi / Arduino?

我正在寻找我的 ESP-12 ESP8266,以便通过 I2C 将 SSID 和 RSSI 信息发送到 RPi / Arduino。关于如何进行的任何建议?

我查看了文档,不禁注意到 SSID 和 RSSI 信息仅被提及通过 AT 命令请求(我认为仅意味着串行接口)。我需要通过计算机/微控制器中的代码自动调用它们。


                        

回帖(1)

尚文清

2024-7-22 17:08:30
要通过I2C将ESP-12 ESP8266的SSID和RSSI信息发送到RPi或Arduino,您需要执行以下步骤:

1. 准备硬件:
   - 1个ESP-12模块
   - 1个RPi或Arduino
   - 杜邦线(用于连接I2C通信)

2. 连接I2C通信:
   - 将ESP-12的SDA引脚连接到RPi或Arduino的SDA引脚
   - 将ESP-12的SCL引脚连接到RPi或Arduino的SCL引脚
   - 将ESP-12的GND引脚连接到RPi或Arduino的GND引脚
   - 将ESP-12的3.3V引脚连接到RPi或Arduino的3.3V引脚(确保电源兼容)

3. 配置ESP-12模块:
   - 将ESP-12模块设置为I2C从设备模式。这可以通过修改固件或使用AT命令来实现。例如,使用以下AT命令:
     ```
     AT+CWMODE=2
     AT+UART_CUR=0,1200,8,1,0
     AT+I2C_ENABLE
     AT+I2C_SCAN
     ```
     这些命令将设置ESP-12为STA模式,设置UART波特率为1200,启用I2C通信,并扫描I2C设备。

4. 在RPi或Arduino上编写代码:
   - 对于RPi,您可以使用Python的`smbus`库来与ESP-12进行I2C通信。以下是一个示例代码片段:
     ```python
     import smbus

     bus = smbus.SMBus(1)  # 选择I2C总线1
     address = 0xXX  # 将XX替换为ESP-12的I2C地址

     def read_ssid_rssi():
         bus.write_byte(address, 0x01)  # 发送读取SSID和RSSI的命令
         data = bus.read_i2c_block_data(address, 0x00, 32)  # 读取数据
         ssid = data[1:-5].decode('utf-8')  # 提取SSID
         rssi = data[-4]  # 提取RSSI
         return ssid, rssi

     ssid, rssi = read_ssid_rssi()
     print("SSID:", ssid)
     print("RSSI:", rssi)
     ```

   - 对于Arduino,您可以使用`SoftWire`库来实现软件I2C通信。以下是一个示例代码片段:
     ```cpp
     #include

     SoftWire bus(10, 11);  // 使用数字引脚10和11作为I2C引脚

     const int address = 0xXX;  // 将XX替换为ESP-12的I2C地址

     void setup() {
       bus.begin();
       Serial.begin(115200);
     }

     void loop() {
       byte data[32];
       bus.beginTransmission(address);
       bus.write(0x01);  // 发送读取SSID和RSSI的命令
       bus.endTransmission();

       bus.requestFrom(address, 32);
       for (int i = 0; i < 32; i++) {
         data[i] = bus.read();
       }

       String ssid = "";
       for (int i = 1; i < 32 - 5; i++) {
         ssid += char(data[i]);
       }
       int rssi = data[31];

       Serial.print("SSID: ");
       Serial.println(ssid);
       Serial.print("RSSI: ");
       Serial.println(rssi);

       delay(1000);
     }
     ```

5. 将代码上传到RPi或Arduino,并观察输出。您应该能够看到ESP-12模块检测到的SSID和RSSI信息。

请注意,您可能需要根据您的具体硬件和软件环境调整这些示例代码。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分