[TPYBoard - Micropython] 五分种学会用TPYBoard - GPS 制作短信群发机
轉(zhuǎn)載請(qǐng)注明:@小五義?http://www.cnblogs.com/xiaowuyi?
一、什么是TPYBoard-GPS
? ? ? ?TPYBoard-GPS又稱TPYBoard?V702,是目前市面上唯一支持通信定位功能的MicroPython開發(fā)板:支持Python3.0及以上版本直接運(yùn)行。支持GPS+北斗雙模定位、GPRS通信、短信功能、電話功能;板載溫濕度、光敏、三軸加速度傳感器、蜂鳴器、LCD5110顯示屏。免費(fèi)提供定位測(cè)試服務(wù)平臺(tái)。實(shí)物如下圖:
?
?
二、利用TPYBoard - GPS?完成單條短信發(fā)送功能
1、具體要求
? ? ? ?利用TPYBoard-GPS完成單條短信的發(fā)送功能
2、所需器件
? TPYBoard-GPS開發(fā)板??一塊
? Gsm手機(jī)卡 ? ? ? ? ?一張
3、短信發(fā)送原理
? ?手機(jī)的信號(hào)頻率很高,一般在900Mhz左右,靠電離層反射傳播,打電話的手機(jī)信號(hào)傳到最近的基站,也就是移動(dòng)或者連通的信號(hào)塔,再由基站把高頻信號(hào)頻率降低,由基站和基站之間通信,這個(gè)信號(hào)是直線傳播,遇到高的建筑物會(huì)被擋住,所以那些塔都豎的很高,傳到接電話的手機(jī)附近的基站,再轉(zhuǎn)成高頻信號(hào)發(fā)給手機(jī)。
? ?短消息業(yè)務(wù)(SMS-Short?Message?Service)的實(shí)現(xiàn)原理很簡(jiǎn)單:?
? ?第一是存儲(chǔ)轉(zhuǎn)發(fā)機(jī)制。SMS傳送數(shù)據(jù)包的工作由移動(dòng)網(wǎng)絡(luò)中的短消息中心而不是終端用戶來完成,如果用戶不在服務(wù)區(qū)內(nèi),短消息就被存儲(chǔ)在短消息中心,等用戶出現(xiàn)之后,再轉(zhuǎn)發(fā)給他,這是GPRS等業(yè)務(wù)所不具備的。?
? ?第二是傳遞確認(rèn)機(jī)制。在電路交換數(shù)據(jù)環(huán)境中,連接是端到端的,所以用戶能夠知道連接是否完成,以及數(shù)據(jù)傳遞的情況.
? ?通俗點(diǎn)說:基站永遠(yuǎn)是在發(fā)射信號(hào)的,其中很重要的一部分就是廣播消息,廣播消息中的一類是尋呼消息(含電話號(hào)碼),每個(gè)手機(jī)都在時(shí)刻監(jiān)聽尋呼消息,當(dāng)它發(fā)現(xiàn)一個(gè)尋呼消息是給它的話(即有人正打它電話),它就會(huì)和基站建立連接,通過基站和打你電話的人聯(lián)系。
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拉低兩秒以上,啟動(dòng)通信功能 pyb.delay(2000) N1.high() pyb.delay(10000)#高Y6,延時(shí)10秒,這樣是為了確保通信模塊正常開機(jī) u2 = UART(4, 115200)#定義串口4,波特率設(shè)置為115200 Message='TPYBoard_GPS'#輸入你想要發(fā)送的短信的內(nèi)容; number='1**********'#輸入想要發(fā)送的手機(jī)號(hào) w=0 r=0 while r<1:u2.write('AT+CMGF=1\r\n')#發(fā)送AT+CMGF=1\r\n,設(shè)置模塊為短信發(fā)送模式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'): #發(fā)送AT+CSCS="GB2312"\r\n,設(shè)置文本的格式u2.write('AT+CNMI=2,1\r\n') #發(fā)送AT+CNMI=2,1\r\n,設(shè)置新短息的模式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') #發(fā)送AT+CMGS="'+number[E]+'"\r\n,把手機(jī)號(hào)碼發(fā)送進(jì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> '): #返回手機(jī)號(hào)碼正確的提示u2.write(Message+'\r\n')#短信內(nèi)容pyb.delay(50)#發(fā)送Message+'\r\n',把設(shè)置好的內(nèi)容發(fā)送出去,并延時(shí)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): #返回發(fā)送的文本內(nèi)容及相應(yīng)的發(fā)送成功的提示后,結(jié)束程序print('7:ok')lcd_5110.lcd_write_string('Has been sent',0,5)r=105、效果
? ? ? 利用手機(jī)號(hào)碼給number對(duì)應(yīng)的手機(jī)號(hào)發(fā)送短信,內(nèi)容為TPYBoard_GPS。
?
三、制作短信群發(fā)機(jī)
1、主要機(jī)制
? ?(1)短信群發(fā)機(jī)是建立在上面的程序代碼的基礎(chǔ)上的;
? ?(2)在上面的代碼中,我們是建立了一個(gè)字符變量來存儲(chǔ)電話號(hào)碼,這里我們建立一個(gè)數(shù)組來?存放電話號(hào)碼;
? ?(3)在電話號(hào)碼全部錄入后;
? ?(4)我們來查詢一下這個(gè)數(shù)組里面有幾個(gè)電話號(hào)碼;
? ?(5)然后我們對(duì)這個(gè)數(shù)組里面的數(shù)據(jù)進(jìn)行依次調(diào)用;
? ?(6)并對(duì)這個(gè)數(shù)據(jù)執(zhí)行發(fā)送短信的流程;
? ?(7)獲取到這是數(shù)組中的第幾個(gè)數(shù)據(jù);
? ?(8)如果數(shù)組中的數(shù)據(jù)全部調(diào)用了一次后,結(jié)束程序的發(fā)送;
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拉低兩秒以上,啟動(dòng)通信功能 pyb.delay(2000) N1.high() pyb.delay(10000)#高Y6,延時(shí)10秒,這樣是為了確保通信模塊正常開機(jī) u2 = UART(4, 115200)#定義串口4,波特率設(shè)置為115200 Message='TPYBoard_GPS'#輸入你想要發(fā)送的短信的內(nèi)容; number=['目的號(hào)碼1','目的號(hào)碼2','目的號(hào)碼3']#輸入想要發(fā)送的手機(jī)號(hào) 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')#發(fā)送AT+CMGF=1\r\n,設(shè)置模塊為短信發(fā)送模式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')#發(fā)送AT+CSCS="GB2312"\r\n,設(shè)置文本的格式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')#發(fā)送AT+CNMI=2,1\r\n,設(shè)置新短息的模式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')#發(fā)送AT+CMGS="'+number[E]+'"\r\n,把手機(jī)號(hào)碼發(fā)送進(jì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> '):#返回手機(jī)號(hào)碼正確的提示u2.write(Message+'\r\n')pyb.delay(50)#發(fā)送Message+'\r\n',把設(shè)置好的內(nèi)容發(fā)送出去,并延時(shí)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):#返回發(fā)送的文本內(nèi)容及相應(yīng)的發(fā)送成功的提示后,結(jié)束程序print('7:ok')E=E+1lcd_5110.lcd_write_string('OK IS:'+str(E),0,5)pyb.delay(24000)r=10E=0
?
3、效果
?? ?給number里列出的所有手機(jī)號(hào)逐一發(fā)送短信,內(nèi)容為TPYBoard_GPS。
? ?這里可以自己控制delay時(shí)間,比如加入一個(gè)隨機(jī)數(shù),我就不再多寫了,各自自己發(fā)揮吧。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaowuyi/p/6502052.html
總結(jié)
以上是生活随笔為你收集整理的[TPYBoard - Micropython] 五分种学会用TPYBoard - GPS 制作短信群发机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: propertychange方法
- 下一篇: Python list 和 tuple