转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi

欢迎加入讨论群 64770604
 

一、什么是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、代码

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、具体代码

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')
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时间,比如加入一个随机数,我就不再多写了,各自自己发挥吧。

[TPYBoard - Micropython] 五分种学会用TPYBoard - GPS 制作短信群发机的更多相关文章

  1. [TPYBoard - Micropython 之会python就能做硬件 9] 五分种学会用TPYBoard V102 制作避障小车(升级版)

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 感谢山东萝卜电子科技公司授权   一.实验器材 1.TPYboard V102板 ...

  2. 五、K3 WISE 开发插件《K3 Wise 群发短信配置开发(二)之短信群发配置》

    开发环境:K/3 Wise 13.0.Sql Server 2005 目录 一.开启Sql Server Agent代理服务 二.短信发送原理 三.编写存储过程 四.开启Sql Server作业 一. ...

  3. MicroPython+北斗+GPS+GPRS:TPYBoardv702短信功能使用说明

    转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) TPYBoardv702是目前市面上唯一支持通信定位功能的MicroPy ...

  4. python--(十五步代码学会进程)

    python--(十五步代码学会进程) 一.进程的创建 import time import os #os.getpid() 获取自己进程的id号 #os.getppid() 获取自己进程的父进程id ...

  5. (转)短信vs.推送通知vs.电子邮件:app什么时候该用哪种方式来通知用户?

    转:http://www.360doc.com/content/15/0811/00/19476362_490860835.shtml 现在,很多公司都关心的一个问题是:要提高用户互动,到底采取哪一种 ...

  6. asp.net两种方式的短信接口使用(提供接口的都是收费的)

    一种是http请求的方式,另一种就是提供WebService接口供调用的. //服务商 sms.webchinese.cn //sms_url="http://sms.webchinese. ...

  7. 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)

    1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...

  8. Android手机上监听短信的两种方式

    Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...

  9. Android之发送短信的两种方式

    SMS涉及的主要类SmsManager 实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员. 公有方法: ArrayList< ...

随机推荐

  1. 一分钟完成MySQL5.7安装部署

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1855415 Part ...

  2. ThinkPHP 自动验证实例

    //array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),protected $_validate = array( ); ThinkPHP 自动验证定义的附加规则如下: r ...

  3. MYSQL 函数复习

    数学函数    ABS(X)    返回X的绝对值    SQRT(x)        返回非负数X的二次方根    MOD(x,y)    返回x被y除后的余数    CEIL(x)         ...

  4. Android中支持的距离单位

    px(像素):每个px对应屏幕上的一个点 dip或dp(device independent pixels,设备独立像素):一种基于屏幕密度的抽象单位.在每英寸160点的显示器上,1dip=1px.但 ...

  5. 查找子字符串----KMP算法深入剖析

    假设主串:a b a b c a b c a c b a b      子串:a b c a c 1.一般匹配算法 逐个字符的比较,匹配过程如下: 第一趟匹配 a b a b c a b c a c ...

  6. python 安装与pip安装

    在大二的时候接触过一段时间的Python,最近又开始玩起了这门语言.总的来说,个人很喜欢Python的语言风格,但是这门语言对于windows并不算很友好,因为如果是初学者在windows环境下安装, ...

  7. overflow:hidden 你所不知道的事

    overflow:hidden 你所不知道的事 overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解. ...

  8. loadrunner Analysis :SLA(Service Level Agreement服务水平协议)

    SLA是为负载场景定义的具体目标,用于与实际负载结果比较,确定系统是否达到性能目标. 1.1.1     设置SLA(以Transaction Response Time(Average)为例) 可以 ...

  9. 最简单的Linux虚拟机磁盘扩容方法

    思路:1.虚拟机增加磁盘容量: 2.将增加的磁盘容量增加到系统分区中: 准备阶段: 下载Gparted软件:https://sourceforge.net/projects/gparted/files ...

  10. svn git协同管理

    项目开发过程中总有一些奇奇怪怪的需求出现. 我们的项目管理是使用SVN的,用SVN是历史原因,无法整个项目向Git切换.由于我需要管理SVN,做一些代码合并工作.每次合并都会遇到SVN代码需要对比查看 ...