基于RISC-V MCU为核心的电能监控排插,及有人云物联网平台监控数据

  • 一、预想功能
  • 二、系统框架
  • 三、硬件介绍
  • 四、软件介绍
    • 1.主函数
    • 2.电能计量模块相关驱动函数
    • 3.以太网模块相关驱动函数
  • 五、有人云平台控制面板
  • 六、功能验证
    • 1.完整成品展示
    • 2.OLED 屏幕显示测试
    • 3.有人云平台测试
  • 七.演示视频

一、预想功能

基于32 位通用增强型 RISC-V MCU CH32V103开发板作为核心控制主板,通过接收和处理单相电能检测模块实时获取的单相数据,包括对电压、电流、有功功率、无功功率、电能、功率因数、二氧化碳含量、频率、芯片温度等相关数据进行计算和整理,同时驱动OLED 屏幕实时刷新显示单相电能数据,并将数据进行打包后通过串口向以太网模块发送数据包,以太网模块将数据包上传至云端,实现远距离在有人云平台对数据进行监控及上下发指令功能。

二、系统框架

三、硬件介绍


该智能电表硬件部分主要由RISC-V MCU CH32V103开发板、电能计模块、以太网模块、驱动模块、OLED 屏幕以及排插等器件组成。

RISC-V MCU CH32V103开发板:作为核心主板。负责对电能检测模块下发收集指令,以及对电能检测模块响应的数据进行处理,一方 面对接收的单相数据进行转换后驱动OLED 屏幕对相关数据进行显示,另一方面对单相数据进行重新打包并通过串口对以太网模块进行数据传输。

电能计模块:通过排插连接电器,并实时检测外接电器的单相数据。若接收主板发来的接收指令,则将检测到的数据上发到主板。

以太网模块:作为开发板与云端进行数据传输的媒介。当模块接收主板下发的数据包时,会将数据包通过路由器上传到云端,有人云平台通过对数据进行接收并显示到监控界面上,用户也可通过在有人云的监控界面对主板下发数据和指令。

驱动模块:按照主板指令驱动散热器开关以及转动的速度等。

OLED屏幕:显示相关数据。

排插:可外接电器,支持220V交流供电,接入排插的电器运行时的单相数据不断被电能检测模块进行收集。

四、软件介绍

1.主函数

int main(void)
{uint8_t OLED_Show_Change = 0;uint8_t OLED_Show_First_In = 0;DisableGlobalIRQ();board_init();           //务必保留,本函数用于初始化MPU 时钟 调试串口gpio_init(B2, GPO, 0, GPIO_PIN_CONFIG);           //GPIO初始化  PB2//外接LED2gpio_init(C0, GPO, 1, GPIO_PIN_CONFIG);           //GPIO初始化  PC0//外接KEYgpio_init(C1, GPO, 1, GPIO_PIN_CONFIG);           //GPIO初始化  PC1//外接LED1gpio_init(C3, GPO, 0, GPIO_PIN_CONFIG);gpio_init(C4, GPO, 0, GPIO_PIN_CONFIG);uart_init(UART_1, 4800, UART1_TX_A9, UART1_RX_A10);uart_init(UART_2, 115200, UART2_TX_A2, UART2_RX_A3);uart_rx_irq(UART_1, ENABLE);
//  uart_tx_irq(UART_1, ENABLE);uart_rx_irq(UART_2, ENABLE);
//  uart_tx_irq(UART_2, ENABLE);U_OLED_Init();  //用户初始化OLED函数U_OLED_Clear(); //清屏函数timer_pit_interrupt_ms(TIMER_1, 10);    //初始化定时TIM1  10毫秒中断一次EnableGlobalIRQ(0);while (1){if (U_Tim_Count > 250)//计时{U_Tim_Count = 0;OLED_Show_Change++;if (OLED_Show_Change > 2){OLED_Show_Change = 0;OLED_Show_First_In = 0;}}switch (OLED_Show_Change)//OLED切屏{case 0:U_Show_IM1253B_Data1(OLED_Show_First_In, U_IM1253B_Data);OLED_Show_First_In = 1;break;case 1:U_Show_IM1253B_Data2(OLED_Show_First_In, U_IM1253B_Data);OLED_Show_First_In = 0;break;case 2:U_Show_IM1253B_Data3(OLED_Show_First_In, U_IM1253B_Data);OLED_Show_First_In = 1;break;default:break;}if (MCU_Interrupt0_Timer_1S_End) //定时1S向IM1253B模块发送读取相关寄存器数据的命令{U_Send_RendCommand_IM1253B(); //向IM1253B模块发送读取相关寄存器数据函数MCU_Interrupt0_Timer_1S_End = 0;U_Send_Ethernet_Data();//向以太网模块发送电能数据systick_delay_ms(100);//延时100ms,分段发送数组U_Send_Ethernet_Data2();//向以太网模块发送开关数据}U_Calculation_IM1253B_Data(); //计算IM1253B相关电能数据函数receive_key();//接收以太网下发数据}
}

2.电能计量模块相关驱动函数

串口1中断函数

void USART1_IRQHandler(void)
{static uint8_t U_GetData;uart_query(UART_1, &U_GetData);USART_ClearITPendingBit(USART1, USART_IT_RXNE);U_MCU_UART1_GetData_End = U_Get_IM1253B_Data(U_GetData); //接收IM1253B电能计量模块驱动函数}

读取电能计上发的数据,进行判断后存入特定数组中

uint8_t U_Get_IM1253B_Data(uint8_t Get_Data)
{static uint8_t i = 0;static uint8_t Get_Data_Buf[37] ={ 0 }; //存储获取数据数组Get_Data_Buf[i++] = Get_Data; //将获取到的数据存入数组if (Get_Data_Buf[0] != 0x01)  //判断帧头{i = 0;}if ((i == 2) && (Get_Data_Buf[1] != 0x03)) //判断帧头{i = 0;}if ((i == 3) && (Get_Data_Buf[2] != 0x20)) //判断帧头{i = 0;}if (i > 2){if (i != (Get_Data_Buf[2] + 5)){return 0;}if (Get_Data_Buf[2] == 0X20){memcpy(IM1253B_Data_Buf, Get_Data_Buf, 37); //将数据拷贝到IM1253B_Data_Buf数组中return 1;}}return 0;
}

向电能计发送读取相关寄存器命令函数

void U_Send_RendCommand_IM1253B(void)
{static uint8_t ReadCommad[8] ={ 0x01, 0x03, 0x00, 0x48, 0x00, 0x08, 0xc4, 0x1a }; //读取IM1253B相关寄存器命令uint8_t i = 0;for (i = 0; i < 8; i++){uart_putchar(UART_1, ReadCommad[i]);systick_delay_ms(1);}
}

3.以太网模块相关驱动函数

对电能相关数据进行打包并发送给以太网模块函数

void U_Send_Ethernet_Data(void)//用户向以太网模块发送电能相关数据
{uint8_t U_Send_Ethernet_Data[45] ={ 0x01, 0x46, 0x00, 0x00, 0x00, 0x10, 0x20 };        //电能和温度数据存储数组Float_Data_Arry_Change_uchar(U_Send_Ethernet_Data, U_IM1253B_Data_Float,10);//浮点型16进制数据转化成字符型数据并存入电能和温度数据存储数组U_GetCrcData(U_Send_Ethernet_Data, 39);      //计算Modbus RTU协议的CRC校验码//systick_delay_ms(500);uart_putbuff(UART_2, U_Send_Ethernet_Data, 41);}

向以太网发送设备开关指令函数


void U_Send_Ethernet_Data2(void)//发送开关指令
{uint8_t U_Send_Ethernet_Data2[12] ={ 0x01, 0x45, 0x00, 0x00, 0x00, 0x10, 0x02 };       //开关U_Send_Ethernet_Data2[7] = U_Ethernet_Data_Float[0];//将开关信号存入相关数组内U_Send_Ethernet_Data2[8] = U_Ethernet_Data_Float[1];U_GetCrcData(U_Send_Ethernet_Data2, 9);//计算校验位uart_putbuff(UART_2, U_Send_Ethernet_Data2, 11);//输出开关指令}

对以太网模块返回到主板的数据进行判断后把特定数据存入数组中

uint8_t U_MCU_UART2_GetData_End = 0;  //串行口2接收数据结束标志位
uint8_t Ethernet_Data_Buf[8] =  { 0 };
uint8_t U_Get_Ethernet_Data(uint8_t Get_Data)//接收以太网下发的数据并进行判断,存入数组中
{static uint8_t i = 0;static uint8_t E_Data_Buf[8] ={ 0 }; //存储获取数据数组E_Data_Buf[i++] = Get_Data; //将获取到的数据存入数组if (E_Data_Buf[0] != 0x01)  //判断帧头{i = 0;}if ((i == 2) && (E_Data_Buf[1] != 0x05)) //判断帧头{i = 0;}if ((i == 3) && (E_Data_Buf[2] != 0x00)) //判断帧头{i = 0;}if ((i == 4) && (E_Data_Buf[3] != 0x00)) //判断帧头{i = 0;}if(i == 8)//接收完一套完整的数据{memcpy(Ethernet_Data_Buf, E_Data_Buf, 9);将数据拷贝到Ethernet_Data_Buf数组中(比数组个数多一位,否则未知bug)}}

计算校验位函数

static void U_GetCrcData(uint8_t *U_Data_Buffer, uint8_t len)//计算Modbus RTU协议的CRC校验码
{uint16_t wcrc = 0XFFFF;                    //16位crc寄存器预置uint8_t temp;uint8_t CRC_L, CRC_H;uint8_t i = 0, j = 0;          //计数for (i = 0; i < len; i++)                //循环计算每个数据{temp = *U_Data_Buffer & 0X00FF;           //将八位数据与crc寄存器亦或U_Data_Buffer++;                          //指针地址增加,指向下个数据wcrc ^= temp;                       //将数据存入crc寄存器for (j = 0; j < 8; j++)               //循环计算数据的{if (wcrc & 0X0001)               //判断右移出的是不是1,如果是1则与多项式进行异或。{wcrc >>= 1;                 //先将数据右移一位wcrc ^= 0XA001;               //与上面的多项式进行异或}else                         //如果不是1,则直接移出{wcrc >>= 1;                   //直接移出}}}CRC_L = wcrc & 0xff;                          //crc的低八位*U_Data_Buffer = CRC_L;CRC_H = wcrc >> 8;                         //crc的高八位*(U_Data_Buffer + 1) = CRC_H;
}

五、有人云平台控制面板


在有人云平台对控制界面进行编辑排版,定义相关变量及协议。

六、功能验证

1.完整成品展示

2.OLED 屏幕显示测试

将设备接入负载,打开电源。

如上所示,OLED 屏幕显示正常,且数据无错误。

3.有人云平台测试

接通电源和电器后在电脑端打开有人云平台
如上所示,数据能够正常显示且实时更新。

打开手机有人云平台小程序

如上所示,数据能正常显示且实时更新。

正常状态下散热器未打开

打开下发指令开关


如上所示,可见散热器开始转动,云平台下发指令成功,开发板执行指令成功。

综合上面几项测试,以RISC-V MCU CH32V103芯片为核心的开发板实现了对电能数据的收发和处理以及通过OLED正常显示,对云平台实现数据交换以及远程无线指令上发下发和执行功能,达到预想功能,测试成功。

七.演示视频

演示视频

一种物联网型的电能监控排插相关推荐

  1. 如何从零设计一种物联网组网协议

    不看这几篇好文,就别说自己了解物联网 物联网( IoT ,Internet of things )即"物物相连的互联网",是互联网基础上的延伸和扩展的网络,将各种信息传感设备与网络 ...

  2. 电梯监控系统的服务器,电梯物联网及远程实时监控系统方案-20210712141708.docx-原创力文档...

    出色文档 出色文档 PAGE PAGE15 出色文档 PAGE 电梯物联网和长途及时监控体系计划 2016年11月 出色文档 目录 1. 体系概括 3 2. 体系计划 5 2.1 硬件部辩解明 6 2 ...

  3. 基于物联网的多点温度监控系统(WeMOS D1 WIFI ESP8266 开发板)

    基于物联网的多点温度监控系统 一.设计任务与要求 1. 任务 设计制作基于物联网的多点温度监控系统. 2. 要求 1.实时获取3个被测对象温度,温度测量范围:-55℃ -+125℃:测量精度:0.1℃ ...

  4. 怎么形容智能冰激凌机器人_一种人机交互型冰激凌多功能自动售卖机器人的制作方法...

    本发明涉及智能机器人技术领域,具体为一种人机交互型冰激凌多功能自动售卖机器人. 背景技术: 冰淇淋(ice cream),是以饮用水.牛奶.奶粉.奶油(或植物油脂).奶油食糖等为主要原料,加入适量食品 ...

  5. 设计模式总结: 5种创建型,7种结构型,11种行为型

    设计模式总结: 5种创建型,7种结构型,11种行为型 (加粗的为常用模式) 5种创建型: 工厂方法模式factory 抽象工厂abstactfactory 单例模式singleton 建造者模式bui ...

  6. 9型转x型 cobol_兰州一餐馆推鸳鸯牛肉面 9种面型一面多吃

    来源标题:兰州一餐馆推鸳鸯牛肉面,清汤酸菜各一边还有9种面型,网友:能连吃三碗 近日,位于甘肃兰州的一家牛肉面馆推出了鸳鸯牛肉面. 一个大碗分隔为两边,一边是传统清汤牛肉面,另一边是酸菜牛肉面. 拉面 ...

  7. linux 网络监控 邮件,一种基于Linux的邮件监控方法与流程

    本发明涉及计算机安全技术领域,具体地说是一种实用性强.基于Linux的邮件监控方法. 背景技术: 随着计算机的普及以及人们对个人信息安全的重视,如何保障计算机乃至个人信息的安全成为了一个至关重要的问题 ...

  8. python是一种解释型、面向什么的计算机程序设计语言_python语言是一种什么类型...

    python语言是一种什么类型,是一种,类型,语言,是在,程序 python语言是一种什么类型 易采站长站,站长之家为您整理了python语言是一种什么类型的相关内容. python语言是一种什么类型 ...

  9. 哪种物联网卡套餐最划算?

    为应对社会全面数据化与物联网化,联通运营商针对物联网与智能产品市场推出了全新联通物联网卡优惠套餐,以便社会各个企业在发展过程中可以充分利用联通物联网卡来实现自身产品的智能化转型.目前物联网市场上最受企 ...

最新文章

  1. 腾讯发布人工智能辅助翻译,致敬人工翻译
  2. PetShop 4.0 数据访问层之我所见
  3. sqoop增量导入hdfs和导出
  4. 系统架构设计师 - 单体架构、SOA架构、微服务架构
  5. java jmstemplate_Java JmsTemplate.setReceiveTimeout方法代码示例
  6. buck电路_2步避免BUCK电路中的“地弹”
  7. mysql regexp边界_MySQL中REGEXP正则表达式使用大全
  8. 时间变为.05PU sql长度写法
  9. JAVA转为wasm
  10. SM3国密加密算法(C语言)
  11. JAVA基础语法——关键字
  12. 电机与拖动基础--第二章第一节
  13. 倾斜摄影技术构建 WebGIS 智慧展馆 | 图扑软件
  14. 商业银行理财业务监督管理办法-2018年9月26日
  15. [渝粤教育] 广东-国家-开放大学 21秋期末考试土木工程施工10516k1
  16. RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解
  17. Calendar获取当前季度、月、周的开始时间结束时间
  18. django实现腾讯云短信sdk和redis缓存服务,手机号验证码登录,未注册直接注册登录
  19. 印象笔记好还是有道云笔记好_有道云笔记和印象笔记哪个好?
  20. Android~获取WiFi MAC地址和IP方法汇总

热门文章

  1. 探访广州黑人区,我好像来到非洲
  2. 8086cpu中的寄存器(cs、ds、es、ss、ip、sp、bp、si、di)
  3. ryu与mininet的连接
  4. 宽德投资C++开发 一面(48min)
  5. 软管金属穿线管蛇形管免焊接式M12航空插头螺丝压紧锁线
  6. DeepLinQ 用于隐私保护的数据共享的分布式多层分类账本
  7. STM32 PS2游戏摇杆 测试
  8. DGA 域名生成和检测算法
  9. 2021高考本溪高中成绩查询,本溪市高级中学2020—2021学年度(上学期) 高一高二期中表奖大会...
  10. 基于Spring事件模型实现观察者模式的工程实践