[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测试程序**

  1. <?php
  2.  
  3. $backstr = "error";
  4. $getStr = $_GET["t"];
  5. if($getStr!=""){
  6. $backstr = "{\"status\":\"0\",\"method\":\"GET\",\"data\":\"".$getStr."\"}";
  7. }else{
  8. $postStr = file_get_contents("php://input");
  9. if($postStr!=""){
  10. $backstr = "{\"status\":\"0\",\"method\":\"POST\",\"data\":\"".$postStr."\"}";
  11. }
  12. }
  13. echo $backstr;
  14. ?>

  

**编写v702上的程序**

HTTP应用是通过板载的GU620模块来实现的,所以我们需要知道该模块HTTP应用的相关AT指令,才能去编写程序实现功能。
`点击下载AT指令说明文档 <http://old.tpyboard.com/downloads/docs/TPYBoard%20v702_GU620%E8%B5%84%E6%96%99.rar>`_

**GET请求实现代码**

  1. import pyb
  2. from machine import SPI,Pin
  3. from pyb import UART
  4. import json
  5.  
  6. #GU620模块初始化
  7. N1 = Pin('Y6', Pin.OUT_PP)#定义通信系统启动引脚
  8. N1.low()
  9. pyb.delay(2000)
  10. N1.high()
  11. pyb.delay(10000)#拉高拉低引脚,启动通信系统
  12. u2 = UART(4,115200,timeout = 50)#定义串口4,设置 波特率为115200
  13. #初始化 HTTP 应用
  14. u2.write('AT+HTTPINIT\r\n')
  15. getURLCMD = 'AT+HTTPPARA=1,"http://old.tpyboard.com/v702/httptest.php?t=123456"\r\n'
  16. #getURLCMD = 'AT+HTTPPARA=1,"https://www.baidu.com"\r\n'
  17. while True:
  18. if u2.any() > 0:
  19. dataRead = u2.read()
  20. print('_dataRead:',dataRead)
  21. print('-'*30)
  22. if dataRead.find(b'OK') > -1:
  23. #AT命令执行成功
  24. #判断是执行的哪一步操作
  25. if dataRead.find(b'AT+HTTPINIT') > -1:
  26. #初始化HTTP成功
  27. #设置 HTTP 参数值 设置url
  28. u2.write(getURLCMD)
  29. elif dataRead.find(b'AT+HTTPPARA=1') > -1:
  30. #HTTP参数设置成功
  31. #发起GET请求获取数据
  32. u2.write('AT+HTTPACTION=0\r\n')
  33. elif dataRead.find(b'AT+HTTPREAD\r\n\r\n+HTTPREAD') > -1:
  34. #返回可用的数据信息,进行解析 获取到数据长度
  35. datalen = dataRead.decode().split(':')[1].split(',')[0]
  36. print('datalen:',datalen)
  37. #从第0位开始 读取指定长度的数据
  38. u2.write('AT+HTTPREAD=0,{}\r\n'.format(datalen))
  39. elif dataRead.find(b'HTTP/1.1 200 OK') > -1:
  40. #成功读取数据后 停止HTTP应用
  41. u2.write('AT+HTTPTERM')
  42. #进行数据解析 提取出我们需要的信息
  43. b = dataRead.decode()
  44. c = "{"+b.split('{')[-1].split('}')[0]+"}"
  45. #转成json对象 查看是否请求成功
  46. jsonobj = json.loads(c)
  47. print(jsonobj["status"])
  48. pyb.delay(100)
  49. break
  50. elif dataRead.find(b'ERROR') > -1:
  51. #AT命令执行失败
  52. if dataRead.find(b'AT+HTTPINIT') > -1:
  53. #初始化HTTP失败 有可能是之前的没有停止等原因
  54. #发送停止HTTP命令 再重新初始化
  55. u2.write('AT+HTTPTERM\r\n')
  56. pyb.delay(300)
  57. u2.write('AT+HTTPINIT\r\n')
  58. else:
  59. if dataRead.find(b'\r\n+HTTPACTION: 0, 200') > -1:
  60. #收到的数据提示 说明请求成功
  61. #查询当前可用数据
  62. u2.write('AT+HTTPREAD\r\n')

**运行效果**

**POST请求实现代码**

  1. import pyb
  2. from machine import SPI,Pin
  3. from pyb import UART
  4. import json
  5.  
  6. #GU620模块初始化
  7. N1 = Pin('Y6', Pin.OUT_PP)#定义通信系统启动引脚
  8. N1.low()
  9. pyb.delay(2000)
  10. N1.high()
  11. pyb.delay(10000)#拉高拉低引脚,启动通信系统
  12. u2 = UART(4,115200,timeout = 50)#定义串口4,设置 波特率为115200
  13. #初始化 HTTP 应用
  14. u2.write('AT+HTTPINIT\r\n')
  15. getURLCMD = 'AT+HTTPPARA=1,"http://old.tpyboard.com/v702/httptest.php"\r\n'
  16. sendData = "I am TPYBoard v702!"
  17. while True:
  18. if u2.any() > 0:
  19. dataRead = u2.read()
  20. print('_dataRead:',dataRead)
  21. print('-'*30)
  22. if dataRead.find(b'OK') > -1:
  23. #AT命令执行成功
  24. #判断是执行的哪一步操作
  25. if dataRead.find(b'AT+HTTPINIT') > -1:
  26. #初始化HTTP成功
  27. #设置 HTTP 参数值 设置url
  28. u2.write(getURLCMD)
  29. elif dataRead.find(sendData.encode()+b'\r\nOK\r\n') > -1:
  30. #POST需要发送的数据设置成功
  31. #发起POST请求
  32. u2.write('AT+HTTPACTION=1\r\n')
  33. elif dataRead.find(b'AT+HTTPPARA=1') > -1:
  34. #HTTP参数设置成功
  35. #输入HTTP数据AT+HTTPDATA=<size>,<time>
  36. #<size>:发送的数据字节数
  37. #<time>:最大输入数据的时间以毫秒为单位
  38. u2.write('AT+HTTPDATA={},100\r\n'.format(len(sendData)))
  39. elif dataRead.find(b'AT+HTTPREAD\r\n\r\n+HTTPREAD') > -1:
  40. #返回可用的数据信息,进行解析 获取到数据长度
  41. datalen = dataRead.decode().split(':')[1].split(',')[0]
  42. print('datalen:',datalen)
  43. #从第0位开始 读取指定长度的数据
  44. u2.write('AT+HTTPREAD=0,{}\r\n'.format(datalen))
  45. elif dataRead.find(b'HTTP/1.1 200 OK') > -1:
  46. #成功读取数据后 停止HTTP应用
  47. u2.write('AT+HTTPTERM')
  48. #进行数据解析 提取出我们需要的信息
  49. b = dataRead.decode()
  50. c = "{"+b.split('{')[-1].split('}')[0]+"}"
  51. #转成json对象 查看是否请求成功
  52. jsonobj = json.loads(c)
  53. print(jsonobj["status"])
  54. pyb.delay(100)
  55. break
  56. elif dataRead.find(b'ERROR') > -1:
  57. #AT命令执行失败
  58. if dataRead.find(b'AT+HTTPINIT') > -1:
  59. #初始化HTTP失败 有可能是之前的没有停止等原因
  60. #发送停止HTTP命令 再重新初始化
  61. u2.write('AT+HTTPTERM\r\n')
  62. pyb.delay(300)
  63. u2.write('AT+HTTPINIT\r\n')
  64. else:
  65. if dataRead.find(b'\r\n+HTTPACTION: 1, 200') > -1:
  66. #收到的数据提示 说明POST请求成功
  67. #查询当前可用数据
  68. u2.write('AT+HTTPREAD\r\n')
  69. elif dataRead.find(b'AT+HTTPDATA') > -1 and dataRead.find(b'>') > -1:
  70. #提示>符号 串口直接发送POST数据
  71. u2.write(sendData)

- `下载源码 <https://github.com/TPYBoard/TPYBoard-v702>`_

MicroPython TPYBoard v702实现HTTP应用功能的更多相关文章

  1. [Micropython]TPYBoard v202 智能WIFI远控小车

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言---------------------- 之 ...

  2. 如何在MicroPython TPYBoard 添加自定义类库

    开始之前,首先要感谢一下TPYBoard技术交流群(157816561)-云之初晓网友的分享.   今天简单分享下如何将自己编写的一些Python脚本的类库添加到固件中,在使用时只需import调用, ...

  3. [MicroPython]TPYBoard智能小车“飞奔的TPYBoard装甲一号”

    智能小车作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途.智能小车能够实时显示时间.速度.里程,具有自动寻迹.寻光.避障 ...

  4. [Micropython]TPYBoard v202 利用单片机快速实现家庭智能控制平台

    一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品.想想就觉得很复杂,有的用工控机,有的用树莓派,还有的用arduino,不管用什么,都绕不过服务器进行控制,比如yeel ...

  5. micropython TPYBoard v201 简易的web服务器的实现过程

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言 TPYBoard v201开发板上搭载了以太网 ...

  6. MicroPython TPYBoard v102 无线红外遥控舵机(基于红外解/编码模块)

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 红外解码/编码模块介绍 模块上搭载了红外接收头.红外 ...

  7. 基于MicroPython:TPYBoard心率监测器

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 一.前言 这几年智能穿戴设备大火,尤其是手环类,从A ...

  8. [Micropython]TPYBoard v10x拼插编程实验 点亮心形点阵

    一.什么是TPYBoard开发板 TPYBoard是以遵照MIT许可的MicroPython为基础,由TurnipSmart公司制作的一款MicroPython开发板,它基于STM32F405单片机, ...

  9. [Micropython]TPYBoard v10x MFRC522智能门禁系统

    MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.也就是射频卡. 经常忘带钥匙,最尴尬的上周竟然去开4楼的门,(家住五楼,无电梯),开了好一会没打开,事后对4楼 ...

随机推荐

  1. oracle 共享SQL语句

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer poo ...

  2. laravel 5.5 登录验证码 captcha 引入

    https://blog.csdn.net/u013372487/article/details/79461730 前提: 开启Laravel 的用户认证功能 1.安装 Captcha 安装 Capt ...

  3. 一些关于中国剩余定理的数论题(POJ 2891/HDU 3579/HDU 1573/HDU 1930)

    2891 -- Strange Way to Express Integers import java.math.BigInteger; import java.util.Scanner; publi ...

  4. HDFS概念

  5. H3C 常用设备管理命令

  6. ccf-201703-4-地铁修建

    二分+并查集 发现了一个很奇怪的问题,二分的上界设置错了,结果是运行错误...只有95分.后来改了上界就100了,百思不得其解 #include<cstdio> #include<c ...

  7. centos 磁盘挂载

    1.更改磁盘格式 fdisk -l fdisk /dev/vdb mkfs.xfs /dev/vdb1 mkfs.xfs /dev/vdb1 -f 2.查看UUID blkid 3.挂载文件夹 vim ...

  8. java什么是跨平台性?原理是什么?

    所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行. 实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行 ...

  9. 2019-7-29-WPF-元素裁剪-Clip-属性

    title author date CreateTime categories WPF 元素裁剪 Clip 属性 lindexi 2019-7-29 10:0:13 +0800 2019-1-3 15 ...

  10. Laravel修改配置后一定要清理缓存 "php artisan config:clear"!

    用laravel踩到一个大坑... 需要使用laravel的队列(queue)功能, 设置 ".env"配置文件 QUEUE_DRIVER=database 按照文档,建立jobs ...