小白使用ESP8266 IM1266 电量计数模块获取数据通过websocket发送服务器

void setup() {
Serial.begin(4800); //IM1266通信默认波特率4800
//连接wifi
WiFiMulti.addAP(“wifi名称”, “wifi密码”);
while(WiFiMulti.run() != WL_CONNECTED) {
delay(100);
}
//开启websocket
webSocket.begin(“192.168.2.160”, 2345, “/”); //websocket 通信目标ip地址 端口号 路径
webSocket.onEvent(webSocketEvent);
webSocket.setReconnectInterval(5000);
webSocket.enableHeartbeat(15000, 3000, 2);
}

void loop() {
webSocket.loop();
}

// //WebSocket客户端 处理
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
switch(type) {
case WStype_DISCONNECTED:
break;
case WStype_CONNECTED: {
while(1){
//发送数据
String result =“”; //完整信息数据
String VStr,v1,v2,v3,v4 = “”; //存电压信息字符串
String IStr,i1,i2,i3,i4 = “”; //电流字符串
String PStr,p1,p2,p3,p4 = “”; //功率字符串
String QStr,q1,q2,q3,q4 = “”; //电量字符串
webSocket.sendTXT(“发送数据=》”);
Serial.write(USART_TX_BUF,8);
delay(500);
//开始读数据
for(int i = 0; i<37;i++){
String byteData = “”;
byteData = String(Serial.read(),HEX); //第i+1个字节数据
result += byteData;
//第4~7个字节是电压信息
if(i == 3)v1=byteData;
if(i == 4)v2=byteData;
if(i == 5)v3=byteData;
if(i == 6)v4=byteData;
//第8~11个字节是电流信息
if(i == 7)i1=byteData;
if(i == 8)i2=byteData;
if(i == 9)i3=byteData;
if(i == 10)i4=byteData;
//第12~15个字节是功率信息
if(i == 11)p1=byteData;
if(i == 12)p2=byteData;
if(i == 13)p3=byteData;
if(i == 14)p4=byteData;
//第16~19个字节是电能信息
if(i == 15)q1=byteData;
if(i == 16)q2=byteData;
if(i == 17)q3=byteData;
if(i == 18)q4=byteData;
}
webSocket.sendTXT(result);//websocket 发送完整的字节
//IM1266文档 发送的第一个字节是01 用于判断接受的数据是否有效
if(result.charAt(0)== ‘1’){
//将4位拼接在一起 组成一个完整的信息
VStr =v1+v2+v3+v4;
IStr =i1+i2+i3+i4;
PStr =p1+p2+p3+p4;
QStr =q1+q2+q3+q4;
//拼接json数据发送给服务器
String data = “{”;
data += ““v”:”";
data += VStr;

        data += "\",";

        data += "\"i\":\"";

        data += IStr;
        data += "\",";

         data += "\"p\":\"";
        data += PStr;
        data += "\",";

        data += "\"q\":\"";
        data += QStr;


        data += "\"}";
        
        webSocket.sendTXT(data);
     
      delay(1000);
    }
   
	}
		break;
	case WStype_TEXT:
		break;
	case WStype_BIN:
		break;
    case WStype_PING:
        break;
    case WStype_PONG:
        break;
}

}
}


直接复制代码可以正常运行


### 2.代码解读


这是IM1266的文档。通过下列文档可知道需要先发送给IM1266发送数据01,03,00,48,00,08,C4,1A  
 然后IM1266会返回37个字节的数据。每个字节代表的数据可以在下面图片看到: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c6329158a7424b9d9fbb437a3fbf8734.png)  
 发送给IM1266数据



unsigned char USART_TX_BUF[8]={0x01,0x03,0x00,0x48,0x00,0x08,0xC4,0x1A}; //发送给IM1266的数据
Serial.write(USART_TX_BUF,8);//串口发送
delay(500);//延迟 IM1266数据的读取频率是250ms


IM1266会返回37个字节的数据,串口每次读取一个字节的数据。写个循环读取每个字节的信息,将对应的几个字节信息拼接在一起组成原始的数据信息,然后发送给服务器(如:第4~7个字节是电压信息,将4-7个字节拼接在一起,就是电压的16进制信息),下列是代码说明:



for(int i = 0; i<37;i++){
String byteData = “”;
byteData = String(Serial.read(),HEX); //第i+1个字节数据
result += byteData;
//第4~7个字节是电压信息
if(i == 3)v1=byteData;
if(i == 4)v2=byteData;
if(i == 5)v3=byteData;
if(i == 6)v4=byteData;
//第8~11个字节是电流信息
if(i == 7)i1=byteData;
if(i == 8)i2=byteData;
if(i == 9)i3=byteData;
if(i == 10)i4=byteData;
//第12~15个字节是功率信息
if(i == 11)p1=byteData;
if(i == 12)p2=byteData;
if(i == 13)p3=byteData;
if(i == 14)p4=byteData;
//第16~19个字节是电能信息
if(i == 15)q1=byteData;
if(i == 16)q2=byteData;
if(i == 17)q3=byteData;
if(i == 18)q4=byteData;
}
webSocket.sendTXT(result);//websocket 发送完整的字节
//IM1266文档 发送的第一个字节是01 用于判断接受的数据是否有效
if(result.charAt(0)== ‘1’){
//将4位拼接在一起 组成一个完整的信息
VStr =v1+v2+v3+v4;
IStr =i1+i2+i3+i4;
PStr =p1+p2+p3+p4;
QStr =q1+q2+q3+q4;
//拼接json数据发送给服务器
String data = “{”;
data += ““v”:”";
data += VStr;

        data += "\",";

        data += "\"i\":\"";

        data += IStr;
        data += "\",";

         data += "\"p\":\"";
        data += PStr;
        data += "\",";

        data += "\"q\":\"";
        data += QStr;


        data += "\"}";
        
        webSocket.sendTXT(data);
     
      delay(1000);
    }

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值