利用ESP32模块制作万用表联网转接模块

举报
tsinghuazhuoqing 发表于 2022/09/25 00:14:14 2022/09/25
【摘要】 简 介: 本文给出了改在 ESP32 形成万用表联网转换模块过程。 经过改造之后,便可以通过 UDP 来访问万用联网数据了。 关键词: 万用表,ESP32 ...

简 介: 本文给出了改在 ESP32 形成万用表联网转换模块过程。 经过改造之后,便可以通过 UDP 来访问万用联网数据了。

关键词 万用表ESP32

万用表联网
目 录
Contents
背景介绍
制作转接板
连接万用表网络
UDP连接与发送
总 结

 

01 用表联网


一、背景介绍

  由于所使用的 计算机Windows突然检测不到 USB串口线 ,在 读取万用表USB串口模块 制作了利用 CH340 读取串口的模块,但后来这款串口模块也无法识别。 现在利用在 利用ESP32构造一个ZIGBEE的网络发送转接 所使用到的 ESP32模块改在一款 WiFi转换成 RS232 串口,这样便可以摆脱对于计算机UART依赖,直接通过实验室中的 WiFi 来完成对于万用表网络的访问,获得万用表测量信息。

二、制作转接板

1、ESP32转接模块

  ESP32 MicroPython 模块使用 ESP32模块转接板 ,在面包板上搭建与 MAX3232 的接口电路。

▲ 图1.2.1 基于ESP32的MicroPython测试模块

▲ 图1.2.1 基于ESP32的MicroPython测试模块

(1)ESP32模块

  后面又找到了一个用于调试的 ESP32 计时系统,下面还是基于这款模块完成模块改造。

▲ 图1.2.2 ESP32计时系统

▲ 图1.2.2 ESP32计时系统

  利用其中的 UART1 比较方便外出引出接口。

▲ 图A1.2.3 改造ESP32输出接口

▲ 图A1.2.3 改造ESP32输出接口

(2)引出接口

 Ⅱ.引出接口定义
表1-1 ESP32输出管脚定义
PIN1 PIN2 PIN3 PIN4
3.3V GND RXD TXD
 Ⅲ.焊接输出管脚

  根据 ESP32 计时系统的原理图,如下引出 UART1 的接口。

▲ 图1.2.4 焊接引出UART1接口

▲ 图1.2.4 焊接引出UART1接口

  ESP32 的 UART 对应的管脚为:

▲ 图1.2.5 ESP32 UART 缺省管脚

▲ 图1.2.5 ESP32 UART 缺省管脚

  经过测试,直接使用UART1 在 PIN9,PIN10上没有输出,现在修改的模式则是利用 UART2 在 GPIO12(RX),GPIO14(TX)上完成输入输出的设置。

(3)ESP32刷新固件

  利用 Thonny 对于 ESP32 固件进行刷新。具体方法可以参见 ESP-12F模块转接板测试版调试说明,下载MicroPython程序。ESP8266-12F

2、测试ESP32模块

  测试 ESP32 的UART1功能。经过测试之后,验证 UART 的功能正常。

from machine                import Pin,UART
import time
import machine

machine.freq(240000000)
uart1 = UART(2, baudrate=115200, rx=12, tx=14, timeout=10)

bz1 = Pin(21, Pin.OUT)
bz1.on()
time.sleep_ms(50)
bz1.off()
print("Test LED")

while True:
    uart1.write('hello')
    b = uart1.read(5)
    print(b)

    time.sleep_ms(250)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3、MAX3232转接模块

  由于所使用的 MAX3232 模块都是表贴模块,所以利用 一分钟制版方法 搭建具有100mil 测插针接口的小板,便于在面包板上与前面 ESP32 测试版进行连接。

(1)转接板设计

  设计转接板,下面给出了原理图以及快速制版的 PCB 设计图。

AD\Test\2022\MAX3232SIP.SchDoc

▲ 图1.2.3 Altium Design设计的转接板

▲ 图1.2.3 Altium Design设计的转接板

(2)转接板调试

  下面测试电平转接板的功能。 利用前面 ESP32 的 UART 发送与接收 “hello” 字符串。 测量输出信号的电平以,以及短接 UART 的 RX,TX 的管脚。可以获得发送与接收的字符串。

▲ 图1.2.7 焊接后测试RS3232功能

▲ 图1.2.7 焊接后测试RS3232功能

▲ 图1.2.8 测试转接板的输出RS232信号

▲ 图1.2.8 测试转接板的输出RS232信号

三、连接万用表网络

1、读取数据

  根据原来的万用表读取程序 : ShowPannelResult() ,获得万用表网络读取协议。下面程序表明,读取万用表的周期为 25ms。

//---------------------------------------------------------------------------
void __fastcall TMainForm::Timer1Timer(TObject *Sender) {
    static int nShowResultCount = 0;
    if((nShowResultCount ++) >= 25) {
        nShowResultCount = 0;
        if(m_nShowResultFlag) {
            ShowPannelResult();
        }
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  读取数据与解析数据程序片段。

int GetMeterValueAll(double * lfResult) {
    unsigned char ucBuffer[1024];
    ClearPort(PORT1);
    SendChar(0x55, PORT1);

    unsigned char ucChar;
    if(ReceCharL(&ucChar, PORT1, 20)) return 0;
    if(ucChar != 0x55) return 0;
    unsigned char ucMask;
    if(ReceCharL(&ucMask, PORT1, 20)) return 0;
    int nLength = ucMask;

    int i;
    for(i = 0; i < nLength; i ++) {
        if(ReceChar(&ucChar, PORT1)) return 0;
        ucBuffer[i] = ucChar;
        ucMask += ucChar;
    }

    if(ReceChar(&ucChar, PORT1)) return 0;
    if(ucChar != (ucMask ^ 0xff)) return 0;
    if(ReceChar(&ucChar, PORT1)) return 0;
    if(ucChar != 0xaa) return 0;

    float * p;
    int nNumber = nLength / 4;
    for(i = 0; i < nNumber; i ++) {
        p = (float *)&ucBuffer[i * 4];
        *(lfResult + i) = *(p);
    }

    return nNumber;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2、连接接口定义

  定义与万用表联网 RS232 接口定义。 将这个接口定义与 PC UART 的定义相同。 也就是 DB9 的管脚中定义为:

  • PIN2:RXD
  • PIN3:TXD
  • PIN5:GND

▲ 图1.3.1 接口定义

▲ 图1.3.1 接口定义

3、测试读取万用表网络

  利用下面程序,通过发送 0x55 字符之后,接收后面的数据。

from machine                import Pin,UART
import time
import machine

machine.freq(240000000)
uart1 = UART(2, baudrate=115200, rx=12, tx=14, timeout=100)

bz1 = Pin(21, Pin.OUT)
bz1.on()
time.sleep_ms(50)
bz1.off()
print("Test LED")

while True:
    _ = uart1.write(bytes([0x55]))
    b = uart1.read(50)
    print(b)

    time.sleep_ms(10)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

  下面是接收到的万用表的信息。

b'U\x10\x83\xa8{7\xd6\xe5\x9484\x807\xba\x00\x00\x00\x00\xe6\xaa'
b'U\x10\x83\xa8{7\xd6\xe5\x9484\x807\xba\x00\x00\x00\x00\xe6\xaa'
b'U\x10\x8b\xe1j7\x93\x17\x9984\x807\xba\x00\x00\x00\x00\xc2\xaa'
b'U\x10:\x9b\x8e7\x93\x17\x9984\x807\xba\x00\x00\x00\x005\xaa'
b'U\x10:\x9b\x8e7\x93\x17\x9984\x807\xba\x00\x00\x00\x005\xaa'
b'U\x10\x83\xa8{70b\x9f84\x807\xba\x00\x00\x00\x00\x04\xaa'
b'U\x10:\x9b\x8e70b\x9f84\x807\xba\x17\xb7\xd1\xb8\xf0\xaa'
b'U\x10:\x9b\x8e70b\x9f84\x807\xba\x17\xb7\xd1\xb8\xf0\xaa'
b'U\x100b\x9f7\x93\x17\x998RI\x1d\xba\x00\x00\x00\x00\x9a\xaa'
b'U\x100b\x9f7\x93\x17\x998RI\x1d\xba\x00\x00\x00\x00\x9a\xaa'
b'U\x10:\x9b\x8e7r0\x9b8RI\x1d\xba\x00\x00\x00\x00n\xaa'

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

四、UDP连接与发送

1、转发Python程序

  下面是最终的 ESP32 MicroPython 程序。

from machine                import Pin,UART
import time
import machine
import usocket,network

machine.freq(240000000)
uart1 = UART(2, baudrate=115200, rx=16, tx=17, timeout=50)

bz1 = Pin(21, Pin.OUT)
bz1.on()
time.sleep_ms(50)
bz1.off()
wlan = network.WLAN(network.STA_IF)
wlan.active(False)

wlan.active(True)
time.sleep_ms(100)
wlan.connect('TENDA626A', 'gniqouhz')

bz1.on()

while not wlan.isconnected():
    time.sleep_ms(100)

wlan.ifconfig()
bz1.off()

us = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM)
sockaddr = usocket.getaddrinfo('0.0.0.0', 7654)[0][-1]
us.bind(sockaddr)

count = 0

while True:
    data,addr = us.recvfrom(1024)

    if len(data) > 0:
        _ = uart1.write(bytes([0x55]))

        count += 1
        if count >= 10:
            count = 0
            bz1.on()
            time.sleep_ms(5)
            bz1.off()

        b = uart1.read(50)

        if type(b) == bytes:            
            if len(b) > 0:
                us.sendto(b, addr)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

2、修改 MEGA程序

  上位机软件:

D:\zhuoqing\window\cb\MyResearch\Test\TestAD5344\M8BL_BAS\M8BL_BAS.exe

  修改后的程序,能够完成原来基于 UART 的程序功能。
▲ 图1.4.1  测试后的程序

▲ 图1.4.1 测试后的程序

 

  结 ※


  文给出了改在 ESP32 形成万用表联网转换模块过程。 经过改造之后,便可以通过 UDP 来访问万用联网数据了。

利用 TENDA无线服务器中的 DHCP 服务器进行静态IP分配。可以使得接入ESP32 的IP地址固定了。 本文中的ESP32的接入IP地址为:115.

▲ 图2.1 利用 HDCP 服务器进行静态IP分配

▲ 图2.1 利用 HDCP 服务器进行静态IP分配


■ 相关文献链接:

● 相关图表链接:

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/126674441

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。