[TPYBoard - Micropython] 五分种学会用TPYBoard - GPS 制作短信群发机
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi
一、什么是TPYBoard-GPS
TPYBoard-GPS又称TPYBoard V702,是目前市面上唯一支持通信定位功能的MicroPython开发板:支持Python3.0及以上版本直接运行。支持GPS+北斗双模定位、GPRS通信、短信功能、电话功能;板载温湿度、光敏、三轴加速度传感器、蜂鸣器、LCD5110显示屏。免费提供定位测试服务平台。实物如下图:
二、利用TPYBoard - GPS 完成单条短信发送功能
1、具体要求
利用TPYBoard-GPS完成单条短信的发送功能
2、所需器件
TPYBoard-GPS开发板 一块
Gsm手机卡 一张
3、短信发送原理
手机的信号频率很高,一般在900Mhz左右,靠电离层反射传播,打电话的手机信号传到最近的基站,也就是移动或者连通的信号塔,再由基站把高频信号频率降低,由基站和基站之间通信,这个信号是直线传播,遇到高的建筑物会被挡住,所以那些塔都竖的很高,传到接电话的手机附近的基站,再转成高频信号发给手机。
短消息业务(SMS-Short Message Service)的实现原理很简单:
第一是存储转发机制。SMS传送数据包的工作由移动网络中的短消息中心而不是终端用户来完成,如果用户不在服务区内,短消息就被存储在短消息中心,等用户出现之后,再转发给他,这是GPRS等业务所不具备的。
第二是传递确认机制。在电路交换数据环境中,连接是端到端的,所以用户能够知道连接是否完成,以及数据传递的情况.
通俗点说:基站永远是在发射信号的,其中很重要的一部分就是广播消息,广播消息中的一类是寻呼消息(含电话号码),每个手机都在时刻监听寻呼消息,当它发现一个寻呼消息是给它的话(即有人正打它电话),它就会和基站建立连接,通过基站和打你电话的人联系。
4、代码
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import pyb import upcd8544 from machine import SPI,Pin from pyb import UART from ubinascii import hexlify from ubinascii import * leds = [pyb.LED(i) for i in range ( 1 , 5 )] P,L,SHUCHU = 0 , 0 , 0 SPI = pyb.SPI( 1 ) #DIN=>X8-MOSI/CLK=>X6-SCK #DIN =>SPI(1).MOSI 'X8' data flow (Master out, Slave in) #CLK =>SPI(1).SCK 'X6' SPI clock RST = pyb.Pin( 'X20' ) CE = pyb.Pin( 'X19' ) DC = pyb.Pin( 'X18' ) LIGHT = pyb.Pin( 'X17' ) lcd_5110 = upcd8544.PCD8544(SPI, RST, CE, DC, LIGHT) count_ = 0 N2 = Pin( 'Y3' , Pin.OUT_PP) N1 = Pin( 'Y6' , Pin.OUT_PP) N1.low() #使用程序把引脚Y6拉低两秒以上,启动通信功能 pyb.delay( 2000 ) N1.high() pyb.delay( 10000 ) #高Y6,延时10秒,这样是为了确保通信模块正常开机 u2 = UART( 4 , 115200 ) #定义串口4,波特率设置为115200 Message = 'TPYBoard_GPS' #输入你想要发送的短信的内容; number = '1**********' #输入想要发送的手机号 w = 0 r = 0 while r< 1 : u2.write( 'AT+CMGF=1\r\n' ) #发送AT+CMGF=1\r\n,设置模块为短信发送模式 pyb.delay( 50 ) if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '1:' ,_dataRead) lcd_5110.lcd_write_string( 'Message:' , 0 , 0 ) lcd_5110.lcd_write_string( str (Message), 0 , 2 ) if (_dataRead = = b 'AT+CMGF=1\r\n\r\nOK\r\n' ): u2.write( 'AT+CSCS="GB2312"\r\n' ) pyb.delay( 50 ) if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '2:' ,_dataRead) if (_dataRead = = b 'AT+CSCS="GB2312"\r\n\r\nOK\r\n' ): #发送AT+CSCS="GB2312"\r\n,设置文本的格式 u2.write( 'AT+CNMI=2,1\r\n' ) #发送AT+CNMI=2,1\r\n,设置新短息的模式 pyb.delay( 50 ) if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '3:' ,_dataRead) if (_dataRead = = b 'AT+CNMI=2,1\r\n\r\nOK\r\n' ): u2.write( 'AT+CMGS="' + number + '"\r\n' ) #发送AT+CMGS="'+number[E]+'"\r\n,把手机号码发送进去 pyb.delay( 50 ) if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '4:' ,_dataRead) #b'AT+CMGF=1\r\n\r\nOK\r\n' if (_dataRead = = b 'AT+CMGS="' + number + '"\r\n\r\n> ' ): #返回手机号码正确的提示 u2.write(Message + '\r\n' ) #短信内容 pyb.delay( 50 ) #发送Message+'\r\n',把设置好的内容发送出去,并延时 if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '5:' ,_dataRead) print ( len (_dataRead)) w = len (_dataRead) _dataRead = str (_dataRead)[ 2 :w] print ( '6:' ,_dataRead) if (_dataRead = = Message): #返回发送的文本内容及相应的发送成功的提示后,结束程序 print ( '7:ok' ) lcd_5110.lcd_write_string( 'Has been sent' , 0 , 5 ) r = 10 |
5、效果
利用手机号码给number对应的手机号发送短信,内容为TPYBoard_GPS。
三、制作短信群发机
1、主要机制
(1)短信群发机是建立在上面的程序代码的基础上的;
(2)在上面的代码中,我们是建立了一个字符变量来存储电话号码,这里我们建立一个数组来 存放电话号码;
(3)在电话号码全部录入后;
(4)我们来查询一下这个数组里面有几个电话号码;
(5)然后我们对这个数组里面的数据进行依次调用;
(6)并对这个数据执行发送短信的流程;
(7)获取到这是数组中的第几个数据;
(8)如果数组中的数据全部调用了一次后,结束程序的发送;
2、具体代码
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | import pyb import upcd8544 from machine import SPI,Pin from pyb import UART from ubinascii import hexlify from ubinascii import * leds = [pyb.LED(i) for i in range ( 1 , 5 )] P,L,SHUCHU = 0 , 0 , 0 SPI = pyb.SPI( 1 ) #DIN=>X8-MOSI/CLK=>X6-SCK #DIN =>SPI(1).MOSI 'X8' data flow (Master out, Slave in) #CLK =>SPI(1).SCK 'X6' SPI clock RST = pyb.Pin( 'X20' ) CE = pyb.Pin( 'X19' ) DC = pyb.Pin( 'X18' ) LIGHT = pyb.Pin( 'X17' ) lcd_5110 = upcd8544.PCD8544(SPI, RST, CE, DC, LIGHT) count_ = 0 N2 = Pin( 'Y3' , Pin.OUT_PP) N1 = Pin( 'Y6' , Pin.OUT_PP) N1.low() #使用程序把引脚Y6拉低两秒以上,启动通信功能 pyb.delay( 2000 ) N1.high() pyb.delay( 10000 ) #高Y6,延时10秒,这样是为了确保通信模块正常开机 u2 = UART( 4 , 115200 ) #定义串口4,波特率设置为115200 Message = 'TPYBoard_GPS' #输入你想要发送的短信的内容; number = [ '目的号码1' , '目的号码2' , '目的号码3' ] #输入想要发送的手机号 w = 0 r = 0 E = 0 Q = 0 while r< 1 : Q = len (number) print (Q) while E<Q: print (number[E]) u2.write( 'AT+CMGF=1\r\n' ) #发送AT+CMGF=1\r\n,设置模块为短信发送模式 pyb.delay( 50 ) if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '1:' ,_dataRead) lcd_5110.lcd_write_string( 'Message:' , 0 , 0 ) lcd_5110.lcd_write_string( str (Message), 0 , 2 ) if (_dataRead = = b 'AT+CMGF=1\r\n\r\nOK\r\n' ): u2.write( 'AT+CSCS="GB2312"\r\n' ) #发送AT+CSCS="GB2312"\r\n,设置文本的格式 pyb.delay( 50 ) if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '2:' ,_dataRead) if (_dataRead = = b 'AT+CSCS="GB2312"\r\n\r\nOK\r\n' ): u2.write( 'AT+CNMI=2,1\r\n' ) #发送AT+CNMI=2,1\r\n,设置新短息的模式 pyb.delay( 50 ) if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '3:' ,_dataRead) if (_dataRead = = b 'AT+CNMI=2,1\r\n\r\nOK\r\n' ): u2.write( 'AT+CMGS="' + number[E] + '"\r\n' ) #发送AT+CMGS="'+number[E]+'"\r\n,把手机号码发送进去 pyb.delay( 50 ) if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '4:' ,_dataRead) #b'AT+CMGF=1\r\n\r\nOK\r\n' if (_dataRead = = b 'AT+CMGS="' + number[E] + '"\r\n\r\n> ' ): #返回手机号码正确的提示 u2.write(Message + '\r\n' )<br> pyb.delay( 50 ) #发送Message+'\r\n',把设置好的内容发送出去,并延时 if (u2. any ()> 0 ): _dataRead = u2.readall() print ( '5:' ,_dataRead) print ( len (_dataRead)) w = len (_dataRead) _dataRead = str (_dataRead)[ 2 :w] print ( '6:' ,_dataRead) if (_dataRead = = Message): #返回发送的文本内容及相应的发送成功的提示后,结束程序 print ( '7:ok' ) E = E + 1 lcd_5110.lcd_write_string( 'OK IS:' + str (E), 0 , 5 ) pyb.delay( 24000 ) r = 10 E = 0 |
3、效果
给number里列出的所有手机号逐一发送短信,内容为TPYBoard_GPS。
这里可以自己控制delay时间,比如加入一个随机数,我就不再多写了,各自自己发挥吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?