基于MicroPython结合ESP8266模块实现TCP通信(AT指令版)

实验目的

  • 学习ESP8266模块(ESP-01)的使用。
  • 进一步学习TPYBoardv10x中UART模块的使用。
  • 结合ESP-01模块完成局域网内的TCP通信实验。

所需元器件

  • ESP-01 WIFI模块 1个
  • TPYBoard v102板子 1块
  • USB转TTL 1个
  • micro USB数据线 1条
  • 杜邦线 若干

本实验采用TPYBoardv102串口AT指令的方式,去连接控制ESP8266模块(型号ESP-01)。

第一步:烧写AT指令的固件
下载AT指令相应固件

这里我下载了一个AiCloud 2.0 AT (512+512map)版本的,版本号:v0.0.0.6。
http://wiki.ai-thinker.com/_media/aicloud/sdk/ai-thinker_esp8266_dout_aicloud_v0.0.0.6_20170517.7z

安信可科技关于ESP8266相关模组的资料地址。http://wiki.ai-thinker.com/esp8266

AT指令固件其他版本下载。http://wiki.ai-thinker.com/esp8266/sdk

下载烧写工具ESPFlashDownloadTool

http://wiki.ai-thinker.com/_media/esp8266/flash_download_tools_v3.6.4.rar

硬件连接

ESP-01模块的引脚图:

烧写固件还需用到USB转TTL,ESP-01模最好使用其他外部器件进行供电。这里,我用的TPYBoardv102开发板。但是,别忘记了开发板与TTL之间需要共地。

接线图:

开始烧写

USB转TTL插上电脑,设备管理器查看端口号。

打开ESPFlashDownloadTool工具,选择【ESP8266 DownloadTool】。

我这里下载的是合成的固件,所以地址直接设置为0x00000,其他设置参考如下:

选择好端口,点击【START】开始烧写。

出现等待上电同步,这时给ESP-01模块上电,或者复位一下,等待下载成功。

第二步:测试AT指令
烧写固件完成之后,将GPIO 0 连接的线拔掉,使其悬空,ESP-01模块会进入正常模式。
打开串口助手工具 http://old.tpyboard.com/download/tool/198.html,默认波特率115200
ESP-01模块启动时,会输出一堆乱码。(其实不是乱码,是一些内部信息)如下:

出现乱码的原因,如下:

输出的内部信息,我们可以忽略掉,只要输出ready,就说明模块一切正常。

进入AT指令模式

AT指令说明文档、AT固件、烧写工具。http://old.tpyboard.com/download/tool/ESP-01.rar

发送指令:AT

(注意:后面需跟一个回车换行,选择在工具中勾选加回车换行)
模块返回AT\r\nOK,说明模块已经成功进入AT指令模式。

查询固件版本

发送指令:AT+GMR

第三步:局域网TCP通信测试
1、首先,让ESP-01接入我们的路由器。

.

2、接下来,我们做一个局域网内TCP通信的测试。本地用网络调试助手建立一个TCP Server如下:

ESP-01作为TCP Client连接Server。发送指令AT+CIPSTART="TCP","192.168.101.116",80

TCP链接建立,开始发送数据。单路链接时发送指令为AT+CIPSEND=x,x为发送的字节数。出现符号">"后就可以发送数据了。

模块会把收到的数据自动通过串口透传过来。

以上,我们都是结合USB转TTL实现的AT指令转发。接下来,我们通过TPYBoardv102开发板实现上面的功能。

接线图:

程序源码:

from pyb import UART
from pyb import LED

#等待ESP-01模块初始化,忽略启动时的内部信息
pyb.delay(1000)

ESP_UART = UART(4,115200,timeout=100)

def sendToUart(msg):
    ESP_UART.write(msg+‘\r\n‘)

CWMODE_CUR = ‘AT+CWMODE_CUR=1‘
CWJAP_CUR = ‘AT+CWJAP_CUR="TurnipSmart","turnip2016"‘
CIPSTART = ‘AT+CIPSTART="TCP","192.168.1.116",80‘
CIPSEND = ‘AT+CIPSEND=%s‘
msg = ‘Hello,I am TPYBoard.‘

if __name__  == ‘__main__‘:
    sendToUart(‘AT‘)
    while True:
        if ESP_UART.any()  > 0:
            buf = ESP_UART.read().decode().replace(‘\r‘,‘‘).replace(‘\n‘,‘‘).replace(‘ ‘,‘‘)
            print(buf)
            if buf.find(‘busyp‘) > -1 or buf.find(‘ERROR‘) > -1:
                # AT指令执行失败
                # 结束程序排查原因
                break
            elif buf.find(‘ATOK‘) > -1:
                # 说明AT指令执行成功
                # 成功进入AT指令模式
                # 设置WIFI模式为sta模式
                sendToUart(CWMODE_CUR)
            elif buf.find(CWMODE_CUR) > -1:
                # 设置sta模式成功,连接AP
                sendToUart(CWJAP_CUR)
                LED(1).on()
            elif buf.find(‘WIFIGOTIP‘) > -1:
                # 连接AP成功
                # 开始连接TCP Server
                pyb.delay(150)
                sendToUart(CIPSTART)
                LED(2).on()
            elif buf.find(CIPSTART) > -1:
                # 连接TCP Server成功,发送数据
                CIPSEND = CIPSEND % str(len(msg))
                sendToUart(CIPSEND)
                LED(3).on()
            elif buf.find(‘>‘) > -1:
                # 发送数据
                sendToUart(msg)
                LED(4).on()

注意:ESP-01模块上电启动时电流比较大,会导致板子的REPL无反应。关闭putty等工具,按板子的RST复位一下,再连接就好。最好方式采用外部电源给ESP-01模块供电,注意要与板子共地。

综上,TCP的测试实验完毕。本实验只是做了一些简单的示例,大家可根据自己的想法结合文档开发出更有意思的作品,比如智能控制开关、智能WIFI小车等。

下载源码: https://github.com/TPYBoard/TPYBoard-v102

原文地址:https://blog.51cto.com/13798209/2404646

时间: 2024-11-08 14:13:10

基于MicroPython结合ESP8266模块实现TCP通信(AT指令版)的相关文章

基于TCP通信的套接字

基于tcp通信的套接字必须先启动服务器再去启动客户端去链接服务器 客户端 服务端 这只是基于tcp通信的一个简单的套接字  只能进行一次的通信 服务端                                                                                                 客户端 这是能多次通信的套接字 在阻塞前添加一个循环就能实现一个链接循环 服务端 客户端 这是模拟ssh实现远程执行命令 粘包问题 二.两种情况下会发生粘包

Prism for WPF再探(基于Prism事件的模块间通信)

上篇博文链接 一.简单介绍: 在上一篇博文中初步搭建了Prism框架的各个模块,但那只是搭建了一个空壳,里面的内容基本是空的,在这一篇我将实现各个模块间的通信,在上一篇博文的基础上改的. 先上效果图:初步介绍下,图中虚线分割为四个模块,每个模块可向另外三个模块发消息.这里还是基于模块化开发CS端程序的思路,模块之间低耦合,如果项目做大,好处自然体现出来了. 图中的效果已经实现了一个模块朝其他三个模块发送消息.这里我使用的事Prism框架中的PubSubEvent事件,其优点是简单易用,直接Pub

[网络篇]ESP8266-SDK教程(三)之TCP通信Server<->Client

纳尼?昨天刚刚打印了个"Hello World!",今天你就让我学习TCP通信?有没有搞错~哈哈,相信很多读者会很迷,其实学习这东西嘛,单单学一些比较简单的,相信没两天就没人看了,所以咱就在基础篇和网络篇穿插着去学习一下ESP8266,毕竟兴趣才是最好的老师嘛!大家以后遇到问题了,来翻文章建议大家根据[XX篇]去快速定位该去哪一篇文章中去查找问题,当然具体会在哪一篇文章中有讲,也不一定了,后面也会穿插着写一点[项目篇][进阶篇][闲扯篇],总的来说就是,本系列文章并没有固定的路线,大家

C# 实现TCP通信

1.TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而TCP提供传输保证. 03,网络层(Netwok):网络层协议由一系列协议组成,包括ICMP.IGMP.RIP.OSPF.IP(v4,v6)等. 04,链路层(Link):又称为物

异步tcp通信——APM.Core 服务端概述

为什么使用异步 异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池.就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理.异步操作执行时,会将操作丢给线程池中的某个工作线程来完成.当开始I/O操作的时候,异步会将工作线程还给线程池,这意味着获取网页的工作不会再占用任何CPU资源了.直到异步完成,即获取网页完毕,异步才会通过回调的方式通知线程池.可见,异步模式借助于线程池,极大地节约了CPU的资源. 注:DMA(Direct Memory Acce

Java网络编程之TCP通信

一.概述 Socket类是Java运行clientTCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信. Socket类的方法会建立和销毁连接,设置各种Socket选项. ServerSocket类是Java执行server端操作的基础类,该类执行于server,监听入站TCP连接.每一个socketserver监听server的某个port.当远程主机的client尝试连接此port时.server就被唤醒.并返回一个表示两台主机之间socket的正常Socket对象.

客户端通过TCP通信分页从服务器获取数据

本文主要探讨,客户端如何通过TCP通信,根据分页信息从服务器获取到相关数据 通常情况下,数据可能很多,比如几千或者几万条,并不适合一次性从服务器获取. 我们只从服务器获取当前页的数据 和数据库中记录总数以便我们可以在客户端计算出页数 ,当用户点击"上一页"或者"下一页"时,再获取相应页的数据 如下图: 双击上图中的某一项,再打开详细页面,如下图: 下面我们从头开始创建一个分页显示的Demo 通信框架采用来自英国开源的networkcomms2.3.1版本 数据库为s

[c#源码分享]客户端程序通过TCP通信传送"小文件"到服务器

源码  (不包含通信框架源码,通信框架源码请另行下载) 上一篇文章写了如何通过TCP通信发送图片到客户端,有朋友问如何传送文件,本文将就如何发送文件进行探讨. 对于比较小的文件,可以把文件转化成字节形式,用契约类包装一下,服务器收到后,再把字节转化成文件即可,这也是本文中实现的方式,这种方式的优点是比较简单灵活,缺点是不适合大文件的发送,也不能显示文件发送的进度. 基于TCP的通信机制,对于比较大的文件,这种方式是不可行的,大文件采用分段发送再合成的方式比较好,以后有时间再对如何发送大文件单独探

清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)

目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程,与TCP和UDP相关的有: 1.http://www.cnblogs.com/xiaozhi_5638/p/3167794.html 2.http://www.cnblogs.com/xiaozhi_5638/p/3169641.html 3.http://www.cnblogs.com/xiaoz