资讯详情

当esp32连接到蓝牙或者wife时,连接引脚后一些模块(光敏电阻,传感器之类)读不出模拟值的解决方法

我是连接onenet当连接到光敏电阻的模拟值时,平台上传光敏电阻的模拟值wife后用analogRead()函数读出0或4095(即无数值变化)

模拟值为0的原因:ESP32芯片中有ADC1和ADC2两个A/D转换器Wi-Fi不能使用蓝牙ADC2引脚ADC1的针脚正常工作,它们是GPIO32-36和GPIO39此时可以读取正确的模拟值

连上wife和onenet代码如下:

#include <Arduino.h> #include "WiFi.h" #include "PubSubClient.h" #include "Ticker.h" #define sensorPin 35 int value=0; const char *ssid = "baby"; //wifi名 const char *password = "fam00201"; //wifi密码 const char *mqtt_server = "183.230.40.96"; //onenet 的 IP地址

#define mqtt_devid "945369735" //设备ID #define mqtt_pubid "428205" //产品ID #define mqtt_password "123456" ///鉴权信息

WiFiClient espClient; //创建一个WIFI连接客户端 PubSubClient client(espClient); // 创建一个PubSub客户端, 传入创建的WIFI客户端

char msg_buf[200]; //发送信息缓冲区 char dataTemplate[] = "{\"temp\":%d,\"hum\":%d}"; ///信息模板 char msgJson[75]; //发送json格式的数据 unsigned short json_len = 0; //json长度 Ticker tim1; //定时器,循环上传数据

//连接WIFI相关函数 void setupWifi() { delay(10); Serial.println("连接WIFI"); WiFi.begin(ssid, password); while (!WiFi.isConnected()) { Serial.print("."); delay(500); } Serial.println("OK"); Serial.println("Wifi连接成功"); }

//收到主题发布的回调, 注意这个回调要实现三个形参 1:topic 主题, 2: payload: 传递的信息 3: length: 长度 void callback(char *topic, byte *payload, unsigned int length) { Serial.println("message rev:"); Serial.println(topic); for (size_t i = 0; i < length; i ) { Serial.print((char)payload[i]); } Serial.println(); }

///将模拟的光敏电阻数据发送到主题 void sendTempAndHumi() { int b=222; if (client.connected()) { value=analogRead(sensorPin); Serial.println(value,DEC); delay(1000); snprintf(msgJson, 40, dataTemplate, value,b); ///dataTemplate模板中, 传递生成的字符串msgJson json_len = strlen(msgJson); //msgJson的长度 msg_buf[0] = char(0x03); ///发送的数据必须遵循ONENET要求发送, 根据要求,第一个数据是3 msg_buf[1] = char(json_len >> 8); ///数据的第二位是要发送的数据长度的高八位 msg_buf[2] = char(json_len & 0xff); ///数据第三位是发送数据长度低的八位 memcpy(msg_buf 3, msgJson, strlen(msgJson)); //从msg_buf第四个开始,放入要传输的数据msgJson msg_buf[3 strlen(msgJson)] = 0; //作为最后一个添加一个0, 这样发送msg_buf准备好了 Serial.print("public message:"); Serial.println(msgJson); client.publish("$dp", (uint8_t *)msg_buf, 3 strlen(msgJson)); //将数据发送到主题$dp } }

//重连函数, 如果客户端断线,可以通过此函数重连 void clientReconnect() { while (!client.connected()) ///重新连接客户端 { Serial.println("重新连接"); if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password)) { Serial.println("connected"); } else { Serial.println("failed"); Serial.println(client.state()); Serial.println("try again in 5 sec"); delay(5000); } } }

void setup() { Serial.begin(115200); ///初始化串口 delay(3000); &bsp;             //这个延时是为了让我打开串口助手   setupWifi();                                            //调用函数连接WIFI   Serial.println("连接onenet");   client.setServer(mqtt_server, 6002);                   //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口   client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息   client.setCallback(callback);                          //设置好客户端收到信息是的回调   tim1.attach(10, sendTempAndHumi);                      //定时每20秒调用一次发送数据函数sendTempAndHumi }

void loop() {   if (!WiFi.isConnected()) //先看WIFI是否还在连接   {     setupWifi();   }   if (!client.connected()) //如果客户端没连接ONENET, 重新连接   {     clientReconnect();   }   client.loop(); //客户端循环检测 }

此链接更为详细:

http://t.csdn.cn/LsnVT

标签: dp840用电阻光敏模块的电阻值d电容222

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台