一、背景在当前项目中需要使用EMW3080模块的无线通信功能。基于卓老师提供的资料我们已完成SMT表面贴装技术焊接并正在有序地对其进行评估。1、硬件焊接及测试首先是基于当前的原理图和PCB在嘉立创完成SMT。当前的电路设计旨在快速实现WiFi配置并通过CH340实现串口与电脑通信同时处理好电源供电即可。在对PCB进行复核时发现所使用的钽电容极性全部接反而SMT过程中并未察觉因此需要手动调整其极性。▲ 图1 原理图▲ 图2 PCB布局布线▲ 图3 嘉立创SMT▲ 图4 管脚配置▲ 图5 测试夹具制作2、WiFi配置使用360家庭防火墙路由器V2作为热点建立局域网主要涉及两个参数无线名称和密码这两点直接影响后续Python程序的修改。至于该路由器的密码修改可以通过按下Reset按键复位后重新设置密码即可Reset时的现象是前面板的指示灯全部长亮。▲ 图6 WiFi账号密码3、EMW3080配置首先就是查询EMW3080使用手册同通过阅读手册确认硬件连接正确。然后结合AT 指令系统进行初步验证。紧接着使用卓老师分享的stm32bl.exe进行测试。▲ 图7 管脚配置▲ 图8 串口通信测试成功▲ 图9 重写py实现wifi配置#!/usr/local/bin/python# -*- coding: utf-8 -*-## EMW3080.PY -- by Dr. ZhuoQing 2026-01-15## Note:#importserialimporttimeimportsys#------------------------------------------------------------SSIDXQWIFIpassword123456789port54321# 串口配置SERIAL_PORTCOM6# 可修改为您的串口号如 COM1, COM2, /dev/ttyUSB0 等BAUDRATE115200TIMEOUT1#------------------------------------------------------------iflen(sys.argv)1:portint(sys.argv[1])iflen(sys.argv)2:SERIAL_PORTsys.argv[2]#------------------------------------------------------------serNonedefinit_serial():globalsertry:serserial.Serial(SERIAL_PORT,BAUDRATE,timeoutTIMEOUT)time.sleep(2)print(f串口{SERIAL_PORT}打开成功)return0exceptExceptionase:print(f串口{SERIAL_PORT}打开失败:{e})return1defsend_cmd(cmd):globalserifserisNoneornotser.is_open:print(串口未打开)returnser.write((cmd\r\n).encode(utf-8))time.sleep(0.1)returnread_response()defread_response():globalserifserisNoneornotser.is_open:returnresponsestart_timetime.time()whiletime.time()-start_timeTIMEOUT:ifser.in_waiting0:try:dataser.read(ser.in_waiting).decode(utf-8,errorsignore)responsedataifOKinresponseorERRORinresponse:breakexcept:passtime.sleep(0.05)returnresponsedefprintf(*args):print(*args)defCheckOK():retssend_cmd(AT).split(\r\n)printf(rets)iflen(rets)2orrets[1]!OK:return1return0defReturnFactory():retssend_cmd(ATFACTORY).split(\r\n)printf(rets,len(rets))iflen(rets)2:return1ifrets[1]!OK:return1return0defScanWiFi():retssend_cmd(ATWSCAN).split(\r\n)forsinrets:ifs[:2]AT:continueifs[:1]:continueiflen(s)0:continueifsOK:continueprintf(s)defJoin626A():retssend_cmd(ATWJAP%s,%s%(SSID,password)).split(\r\n)printf(rets)defReturnAT():send_cmd()defUDPBroadcast(p):send_cmd(ATCIPSTART0,udp_broadcast,192.168.0.255,0,%s%p)defSaveConfig():send_cmd(ATCIPCFGSAVEON)defSetRAWMode():send_cmd(ATCIPEVENTOFF)time.sleep(.5)send_cmd(ATCIPRECVCFG1)time.sleep(.5)send_cmd(ATCIPSENDRAW)defUARTFormat():send_cmd(ATUARTFOMAT1024,50)defclose_serial():globalserifserisnotNoneandser.is_open:ser.close()print(串口已关闭)#------------------------------------------------------------if__name____main__:ifinit_serial()!0:sys.exit(1)ReturnFactory()time.sleep(1)Join626A()time.sleep(2)SaveConfig()time.sleep(4)UARTFormat()time.sleep(1)UDPBroadcast(port)time.sleep(2)SetRAWMode()close_serial()printf(\a)#------------------------------------------------------------# END OF FILE : EMW3080.PY#
EMW3080调试记录
发布时间:2026/6/5 22:53:13
一、背景在当前项目中需要使用EMW3080模块的无线通信功能。基于卓老师提供的资料我们已完成SMT表面贴装技术焊接并正在有序地对其进行评估。1、硬件焊接及测试首先是基于当前的原理图和PCB在嘉立创完成SMT。当前的电路设计旨在快速实现WiFi配置并通过CH340实现串口与电脑通信同时处理好电源供电即可。在对PCB进行复核时发现所使用的钽电容极性全部接反而SMT过程中并未察觉因此需要手动调整其极性。▲ 图1 原理图▲ 图2 PCB布局布线▲ 图3 嘉立创SMT▲ 图4 管脚配置▲ 图5 测试夹具制作2、WiFi配置使用360家庭防火墙路由器V2作为热点建立局域网主要涉及两个参数无线名称和密码这两点直接影响后续Python程序的修改。至于该路由器的密码修改可以通过按下Reset按键复位后重新设置密码即可Reset时的现象是前面板的指示灯全部长亮。▲ 图6 WiFi账号密码3、EMW3080配置首先就是查询EMW3080使用手册同通过阅读手册确认硬件连接正确。然后结合AT 指令系统进行初步验证。紧接着使用卓老师分享的stm32bl.exe进行测试。▲ 图7 管脚配置▲ 图8 串口通信测试成功▲ 图9 重写py实现wifi配置#!/usr/local/bin/python# -*- coding: utf-8 -*-## EMW3080.PY -- by Dr. ZhuoQing 2026-01-15## Note:#importserialimporttimeimportsys#------------------------------------------------------------SSIDXQWIFIpassword123456789port54321# 串口配置SERIAL_PORTCOM6# 可修改为您的串口号如 COM1, COM2, /dev/ttyUSB0 等BAUDRATE115200TIMEOUT1#------------------------------------------------------------iflen(sys.argv)1:portint(sys.argv[1])iflen(sys.argv)2:SERIAL_PORTsys.argv[2]#------------------------------------------------------------serNonedefinit_serial():globalsertry:serserial.Serial(SERIAL_PORT,BAUDRATE,timeoutTIMEOUT)time.sleep(2)print(f串口{SERIAL_PORT}打开成功)return0exceptExceptionase:print(f串口{SERIAL_PORT}打开失败:{e})return1defsend_cmd(cmd):globalserifserisNoneornotser.is_open:print(串口未打开)returnser.write((cmd\r\n).encode(utf-8))time.sleep(0.1)returnread_response()defread_response():globalserifserisNoneornotser.is_open:returnresponsestart_timetime.time()whiletime.time()-start_timeTIMEOUT:ifser.in_waiting0:try:dataser.read(ser.in_waiting).decode(utf-8,errorsignore)responsedataifOKinresponseorERRORinresponse:breakexcept:passtime.sleep(0.05)returnresponsedefprintf(*args):print(*args)defCheckOK():retssend_cmd(AT).split(\r\n)printf(rets)iflen(rets)2orrets[1]!OK:return1return0defReturnFactory():retssend_cmd(ATFACTORY).split(\r\n)printf(rets,len(rets))iflen(rets)2:return1ifrets[1]!OK:return1return0defScanWiFi():retssend_cmd(ATWSCAN).split(\r\n)forsinrets:ifs[:2]AT:continueifs[:1]:continueiflen(s)0:continueifsOK:continueprintf(s)defJoin626A():retssend_cmd(ATWJAP%s,%s%(SSID,password)).split(\r\n)printf(rets)defReturnAT():send_cmd()defUDPBroadcast(p):send_cmd(ATCIPSTART0,udp_broadcast,192.168.0.255,0,%s%p)defSaveConfig():send_cmd(ATCIPCFGSAVEON)defSetRAWMode():send_cmd(ATCIPEVENTOFF)time.sleep(.5)send_cmd(ATCIPRECVCFG1)time.sleep(.5)send_cmd(ATCIPSENDRAW)defUARTFormat():send_cmd(ATUARTFOMAT1024,50)defclose_serial():globalserifserisnotNoneandser.is_open:ser.close()print(串口已关闭)#------------------------------------------------------------if__name____main__:ifinit_serial()!0:sys.exit(1)ReturnFactory()time.sleep(1)Join626A()time.sleep(2)SaveConfig()time.sleep(4)UARTFormat()time.sleep(1)UDPBroadcast(port)time.sleep(2)SetRAWMode()close_serial()printf(\a)#------------------------------------------------------------# END OF FILE : EMW3080.PY#