MicroPython TPYBoard v702实现HTTP应用功能
[Micropython]TPYBoard v702 HTTP应用功能
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇
什么是TPYBoard v702
TPYBoard v702是山东萝卜电子科技有限公司最新开发的,目前市面上唯一支持通信通信功能的MicroPython开发板:支持Python3.0及以上版本直接运行。支持GPS+北斗双模通信、GPRS通信、短信功能、电话功能;板载温湿度、光敏、三轴加速度传感器、蜂鸣器、LCD5110显示屏。免费提供通信测试服务平台。
**TPYBoard v702实物图**
MicroPython TPYBoard v702实现HTTP应用功能
**具体要求**
利用TPYBoard v702完成HTTP应用功能的测试,分别进行GET请求和POST请求。
**所需器件**
- TPYBoard v702开发板 1块
- LCD5110显示屏 1块
- SIM卡 1张(支持移动、联通)
板载通信功能及使用介绍
------------------------------
TPYBoard v702的开发板的整体整体亮点置一就是能板载通信功能,只要在开发板的卡槽上插上一张可以使用的手机卡(不支持电信),即可使用该功能。开发板板载的通信功能包括了电话,短信,GPRS等功能,在这个实验里面我们只使用电话这个功能。
开发板板载的通信功能已经设计的很完善,在接到来电的时候,会主动的把来电的信息通过串口4发送进来,这样一来作为用户的我们就是需要把数据进行相应的处理加显示就可以了。
实现过程
---------------------
为了方便测试,这里用PHP写了一个接收GET和POST请求的程序,代码非常简单,可以直接放到自己服务器上测试,也可以直接用,访问地址在下面源码中有。
**PHP测试程序**
<?php $backstr = "error";
$getStr = $_GET["t"];
if($getStr!=""){
$backstr = "{\"status\":\"0\",\"method\":\"GET\",\"data\":\"".$getStr."\"}";
}else{
$postStr = file_get_contents("php://input");
if($postStr!=""){
$backstr = "{\"status\":\"0\",\"method\":\"POST\",\"data\":\"".$postStr."\"}";
}
}
echo $backstr;
?>
**编写v702上的程序**
HTTP应用是通过板载的GU620模块来实现的,所以我们需要知道该模块HTTP应用的相关AT指令,才能去编写程序实现功能。
`点击下载AT指令说明文档 <http://old.tpyboard.com/downloads/docs/TPYBoard%20v702_GU620%E8%B5%84%E6%96%99.rar>`_
**GET请求实现代码**
import pyb
from machine import SPI,Pin
from pyb import UART
import json #GU620模块初始化
N1 = Pin('Y6', Pin.OUT_PP)#定义通信系统启动引脚
N1.low()
pyb.delay(2000)
N1.high()
pyb.delay(10000)#拉高拉低引脚,启动通信系统
u2 = UART(4,115200,timeout = 50)#定义串口4,设置 波特率为115200
#初始化 HTTP 应用
u2.write('AT+HTTPINIT\r\n')
getURLCMD = 'AT+HTTPPARA=1,"http://old.tpyboard.com/v702/httptest.php?t=123456"\r\n'
#getURLCMD = 'AT+HTTPPARA=1,"https://www.baidu.com"\r\n'
while True:
if u2.any() > 0:
dataRead = u2.read()
print('_dataRead:',dataRead)
print('-'*30)
if dataRead.find(b'OK') > -1:
#AT命令执行成功
#判断是执行的哪一步操作
if dataRead.find(b'AT+HTTPINIT') > -1:
#初始化HTTP成功
#设置 HTTP 参数值 设置url
u2.write(getURLCMD)
elif dataRead.find(b'AT+HTTPPARA=1') > -1:
#HTTP参数设置成功
#发起GET请求获取数据
u2.write('AT+HTTPACTION=0\r\n')
elif dataRead.find(b'AT+HTTPREAD\r\n\r\n+HTTPREAD') > -1:
#返回可用的数据信息,进行解析 获取到数据长度
datalen = dataRead.decode().split(':')[1].split(',')[0]
print('datalen:',datalen)
#从第0位开始 读取指定长度的数据
u2.write('AT+HTTPREAD=0,{}\r\n'.format(datalen))
elif dataRead.find(b'HTTP/1.1 200 OK') > -1:
#成功读取数据后 停止HTTP应用
u2.write('AT+HTTPTERM')
#进行数据解析 提取出我们需要的信息
b = dataRead.decode()
c = "{"+b.split('{')[-1].split('}')[0]+"}"
#转成json对象 查看是否请求成功
jsonobj = json.loads(c)
print(jsonobj["status"])
pyb.delay(100)
break
elif dataRead.find(b'ERROR') > -1:
#AT命令执行失败
if dataRead.find(b'AT+HTTPINIT') > -1:
#初始化HTTP失败 有可能是之前的没有停止等原因
#发送停止HTTP命令 再重新初始化
u2.write('AT+HTTPTERM\r\n')
pyb.delay(300)
u2.write('AT+HTTPINIT\r\n')
else:
if dataRead.find(b'\r\n+HTTPACTION: 0, 200') > -1:
#收到的数据提示 说明请求成功
#查询当前可用数据
u2.write('AT+HTTPREAD\r\n')
**运行效果**
**POST请求实现代码**
import pyb
from machine import SPI,Pin
from pyb import UART
import json #GU620模块初始化
N1 = Pin('Y6', Pin.OUT_PP)#定义通信系统启动引脚
N1.low()
pyb.delay(2000)
N1.high()
pyb.delay(10000)#拉高拉低引脚,启动通信系统
u2 = UART(4,115200,timeout = 50)#定义串口4,设置 波特率为115200
#初始化 HTTP 应用
u2.write('AT+HTTPINIT\r\n')
getURLCMD = 'AT+HTTPPARA=1,"http://old.tpyboard.com/v702/httptest.php"\r\n'
sendData = "I am TPYBoard v702!"
while True:
if u2.any() > 0:
dataRead = u2.read()
print('_dataRead:',dataRead)
print('-'*30)
if dataRead.find(b'OK') > -1:
#AT命令执行成功
#判断是执行的哪一步操作
if dataRead.find(b'AT+HTTPINIT') > -1:
#初始化HTTP成功
#设置 HTTP 参数值 设置url
u2.write(getURLCMD)
elif dataRead.find(sendData.encode()+b'\r\nOK\r\n') > -1:
#POST需要发送的数据设置成功
#发起POST请求
u2.write('AT+HTTPACTION=1\r\n')
elif dataRead.find(b'AT+HTTPPARA=1') > -1:
#HTTP参数设置成功
#输入HTTP数据AT+HTTPDATA=<size>,<time>
#<size>:发送的数据字节数
#<time>:最大输入数据的时间以毫秒为单位
u2.write('AT+HTTPDATA={},100\r\n'.format(len(sendData)))
elif dataRead.find(b'AT+HTTPREAD\r\n\r\n+HTTPREAD') > -1:
#返回可用的数据信息,进行解析 获取到数据长度
datalen = dataRead.decode().split(':')[1].split(',')[0]
print('datalen:',datalen)
#从第0位开始 读取指定长度的数据
u2.write('AT+HTTPREAD=0,{}\r\n'.format(datalen))
elif dataRead.find(b'HTTP/1.1 200 OK') > -1:
#成功读取数据后 停止HTTP应用
u2.write('AT+HTTPTERM')
#进行数据解析 提取出我们需要的信息
b = dataRead.decode()
c = "{"+b.split('{')[-1].split('}')[0]+"}"
#转成json对象 查看是否请求成功
jsonobj = json.loads(c)
print(jsonobj["status"])
pyb.delay(100)
break
elif dataRead.find(b'ERROR') > -1:
#AT命令执行失败
if dataRead.find(b'AT+HTTPINIT') > -1:
#初始化HTTP失败 有可能是之前的没有停止等原因
#发送停止HTTP命令 再重新初始化
u2.write('AT+HTTPTERM\r\n')
pyb.delay(300)
u2.write('AT+HTTPINIT\r\n')
else:
if dataRead.find(b'\r\n+HTTPACTION: 1, 200') > -1:
#收到的数据提示 说明POST请求成功
#查询当前可用数据
u2.write('AT+HTTPREAD\r\n')
elif dataRead.find(b'AT+HTTPDATA') > -1 and dataRead.find(b'>') > -1:
#提示>符号 串口直接发送POST数据
u2.write(sendData)
- `下载源码 <https://github.com/TPYBoard/TPYBoard-v702>`_
MicroPython TPYBoard v702实现HTTP应用功能的更多相关文章
- [Micropython]TPYBoard v202 智能WIFI远控小车
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言---------------------- 之 ...
- 如何在MicroPython TPYBoard 添加自定义类库
开始之前,首先要感谢一下TPYBoard技术交流群(157816561)-云之初晓网友的分享. 今天简单分享下如何将自己编写的一些Python脚本的类库添加到固件中,在使用时只需import调用, ...
- [MicroPython]TPYBoard智能小车“飞奔的TPYBoard装甲一号”
智能小车作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途.智能小车能够实时显示时间.速度.里程,具有自动寻迹.寻光.避障 ...
- [Micropython]TPYBoard v202 利用单片机快速实现家庭智能控制平台
一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品.想想就觉得很复杂,有的用工控机,有的用树莓派,还有的用arduino,不管用什么,都绕不过服务器进行控制,比如yeel ...
- micropython TPYBoard v201 简易的web服务器的实现过程
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言 TPYBoard v201开发板上搭载了以太网 ...
- MicroPython TPYBoard v102 无线红外遥控舵机(基于红外解/编码模块)
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 红外解码/编码模块介绍 模块上搭载了红外接收头.红外 ...
- 基于MicroPython:TPYBoard心率监测器
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 一.前言 这几年智能穿戴设备大火,尤其是手环类,从A ...
- [Micropython]TPYBoard v10x拼插编程实验 点亮心形点阵
一.什么是TPYBoard开发板 TPYBoard是以遵照MIT许可的MicroPython为基础,由TurnipSmart公司制作的一款MicroPython开发板,它基于STM32F405单片机, ...
- [Micropython]TPYBoard v10x MFRC522智能门禁系统
MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.也就是射频卡. 经常忘带钥匙,最尴尬的上周竟然去开4楼的门,(家住五楼,无电梯),开了好一会没打开,事后对4楼 ...
随机推荐
- CCPC final Cockroaches
算法假了,我想的是通过枚举x,删除y的影响,这样答案第一个是没有任何问题的,但是第二个会算重复. 因为我枚举每一个x的时候,得到的y,而算另外一个x的时候,可能已经通过其他的点选到了这个点y这就有点麻 ...
- E. Remainder Problem 分块
两个操作 1对x位置的a[x]+y 2对所有i=y(mod x)求a[i]的和 我们肯定不能n^2 跑,稳超时,但是我们可以这样分块考虑. 为什么n^2不行?因为在x比较小的时候,这个求和操作次数太多 ...
- 数据库设计mysql字段不默认为NULL原因搜集
索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的.所以我们在数据库设计时不要让字段的默认值为NULL ...
- @noi.ac - 488@ cleaner
目录 @description@ @solution@ @accepted code@ @details@ @description@ 小Q计划在自己的新家中购置一台圆形的扫地机器人.小Q的家中有一个 ...
- pytorch中查看gpu信息
其他:windows使用nvidia-smi查看gpu信息 为什么将数据转移至GPU的方法叫做.cuda而不是.gpu,就像将数据转移至CPU调用的方法是.cpu?这是因为GPU的编程接口采用CUDA ...
- PHP利用纯真IP数据库在本地实现IP地址信息查询
https://blog.csdn.net/myweishanli/article/details/45098693 准备工作: 建议本地IP地址数据库,请到http://www.cz88.net/这 ...
- POJ 2763"Housewife Wind"(DFS序+树状数组+LCA)
传送门 •题意 一对夫妇居住在 xx村庄,给村庄有 $n$ 个小屋: 这 $n$ 个小屋之间有双向可达的道路,不会出现环,即所构成的图是个树: 从 $a_i$ 小屋到 $b_i$ 小屋需要花费 $w_ ...
- CSS3 box-sizing 盒子布局
在CSS中盒模型被分为两种,第一种是W3C的标准模型,第二种是IE怪异盒模型.不同之处在于后者的宽高定义的是可见元素框的尺寸,而不是元素框的内容区尺寸.目前对于浏览器大多数元素都是基于W3C标准的盒模 ...
- 无限调用函数add(1)(2)(3)......
无限调用函数,并且累计结果 其实这也算一道面试题吧,笔者曾经被提问过,可惜当时没能答上来...
- h5&css3
HTML5 HTML5简介 万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改.作为新HTML语言,具有新的元素,属性和行为 它具有更大的技术集,允许更多样化和强 ...