【CanMV K210】通信扩展 WiFi Socket TCP Client 通信

在智能硬件项目中,开发板单独运行只是基础能力。真正进入应用场景后,设备往往需要把状态、日志、传感器数据或识别结果发送到电脑、服务器或上位机。比如设备启动后上报在线状态,采集到数据后上传到电脑,电脑端根据返回结果下发控制指令,这些都离不开网络通信能力。

本实验使用 CanMV K210 搭配 ESP8285 WiFi 模块连接路由器,并作为 TCP Client 主动连接电脑端 TCP Server。程序运行后,开发板会初始化 ESP8285 模块,通过 WiFi 接入局域网,再连接指定 IP 和端口的服务器。连接成功后,K210 会按照固定时间间隔发送 K210 online, count: x 这样的文本数据,同时接收电脑端返回的数据并打印到串口终端中。

学习目标 说明
理解网络通信链路 明确 K210、ESP8285、路由器、电脑 TCP Server 之间的关系
掌握 WiFi 初始化流程 使用 UART、AT 指令和 network.ESP8285() 建立网络接口
掌握 TCP Client 通信 使用 socket 主动连接电脑端 TCP Server,并完成数据收发
建立异常重连思路 在 WiFi 断开、Socket 失败、服务器断开时进行重连处理
扩展上位机通信能力 为传感器上传、AI 识别结果回传、远程控制和设备日志采集打基础

这段代码的重点不只是"连上 WiFi",而是把 WiFi 初始化、AT 指令检测、网络连接、Socket 连接、数据发送、数据接收和异常重连封装成完整流程。对于硬件编程入门而言,它展示了开发板如何从独立设备变成网络节点,也为后续传感器数据上传、远程控制、上位机通信和 AI 识别结果回传打下基础。

文章目录

理论基础

TCP 通信实验可以理解成"设备主动向电脑建立连接"的过程。K210 本身负责运行程序,但无线网络连接由 ESP8285 WiFi 模块完成。K210 通过 UART 与 ESP8285 交换数据,ESP8285 连接路由器后进入局域网,电脑端提前启动 TCP Server 并监听指定端口,K210 再作为 TCP Client 主动连接这个服务端。

本实验中,通信链路不是 K210 直接连接电脑,而是经过 ESP8285 和路由器完成。K210 先控制 ESP8285 复位和初始化,再使用 WiFi 名称与密码接入网络。网络连接成功后,程序通过 socket.socket() 创建 TCP Client,连接电脑端 SERVER_IPSERVER_PORT。连接成功后,开发板可以主动发送文本,电脑端也可以返回数据。

TCP Client 和 TCP Server 的角色需要区分清楚。Server 是等待连接的一方,通常运行在电脑上,负责监听端口;Client 是主动连接的一方,本实验中的 CanMV K210 就是 Client。电脑端 Server 必须先启动,并且 IP 地址和端口要与代码中的 SERVER_IPSERVER_PORT 保持一致,否则 K210 会出现 TCP 连接失败。
CanMV K210

Python 程序
UART2 通信

IO13 / IO15
ESP8285 WiFi 模块

AT 指令 / 网络接口
路由器 WiFi

局域网接入
电脑端 TCP Server

监听 IP 与端口
接收 K210 数据

返回控制指令或回显内容
IO25 / GPIOHS0

控制 ESP8285 EN
WiFi 配置

SSID / PASSWORD
Socket 配置

SERVER_IP / SERVER_PORT

这张流程图展示的是通信链路,而不是单纯的软件执行流程。K210 通过 UART 控制 ESP8285,ESP8285 通过 WiFi 接入局域网,电脑端 TCP Server 负责接收连接。程序中的 Socket 连接目标是电脑端服务,而不是路由器本身。只要这条链路中的任意一环配置错误,例如 WiFi 密码错误、电脑 IP 错误、端口未监听、防火墙阻止连接,通信都会失败。

从工程角度看,网络通信程序和普通 GPIO 实验不同。GPIO 实验通常只要引脚配置正确,现象就比较稳定;网络通信实验还要考虑 WiFi 信号、局域网地址、端口监听、电脑防火墙、服务器是否启动、Socket 是否断开等因素。因此本实验代码加入了 WiFi 重试、Socket 重连、发送失败关闭旧连接等处理,让程序更接近真实设备联网逻辑。

硬件设施

本实验真正使用到的硬件包括 CanMV K210 开发板、ESP8285 WiFi 模块、路由器和电脑端 TCP Server。代码中没有使用摄像头、LCD、按键、蜂鸣器、电机或传感器,因此这些模块不作为本节重点。软件侧主要依赖 machine.UARTnetworksocketmaix.GPIOfpioa_manager.fmtime,分别完成串口通信、WiFi 管理、TCP 通信、使能引脚控制、引脚功能映射和延时控制。

接线和通信关系可以先通过下面这张图建立整体印象。K210 使用 IO25 控制 ESP8285 的 EN 使能引脚,使用 IO13 和 IO15 作为 UART2 通信引脚。ESP8285 连接路由器后,K210 再通过 TCP Socket 主动连接电脑端 Server。

硬件 / 软件 作用 说明
CanMV K210 开发板 实验运行平台 负责执行 Python 程序,并通过 UART 与 ESP8285 WiFi 模块通信
ESP8285 WiFi 模块 无线网络模块 负责连接路由器,让 K210 具备 WiFi 网络通信能力
路由器 局域网接入设备 K210 和电脑端 TCP Server 需要处于可互通的网络环境中
电脑端 TCP Server 服务端通信对象 接收 K210 发送的数据,并可向开发板返回数据
machine.UART 串口通信模块 用于创建 UART2,与 ESP8285 模块交换 AT 指令和网络数据
network WiFi 网络模块 通过 network.ESP8285() 创建网络接口对象
socket TCP 通信模块 创建 TCP Client,连接电脑端 Server 并收发数据
maix.GPIO GPIO 控制模块 控制 ESP8285 的 EN 使能引脚
fpioa_manager.fm 引脚映射模块 将物理引脚注册为 GPIOHS 或 UART 功能
time 延时控制模块 控制模块复位、WiFi 重试、Socket 重连和数据发送间隔

接线关系主要根据 WiFiManager.init() 中的 fm.register()GPIO()UART() 代码推导。当前程序使用 IO25 作为 ESP8285 使能控制引脚,使用 IO13 和 IO15 作为 UART2 的发送与接收引脚。实际板卡如果已经内置 ESP8285 模块,部分连线可能已经在开发板上完成;如果是外接模块,需要根据模块丝印和开发板原理图确认 TX、RX 是否交叉连接。

物理引脚 / 配置项 功能映射 代码变量 / 对象 对应硬件 说明
IO25 GPIOHS0 WiFiManager.en ESP8285 EN 使能引脚 用于控制 WiFi 模块启用和复位
IO13 UART2_TX WiFiManager.uart ESP8285 串口通信引脚 K210 通过 UART2 发送 AT 指令和数据
IO15 UART2_RX WiFiManager.uart ESP8285 串口通信引脚 K210 通过 UART2 接收模块返回数据
UART2 串口通道 UART(UART.UART2, ...) K210 与 ESP8285 通信通道 先以 115200 初始化,模块响应正常后切换到 921600
WiFi SSID / 密码 网络配置 WIFI_SSIDWIFI_PASSWORD 路由器 WiFi 用于让 ESP8285 接入指定无线网络
Server IP / Port TCP 连接目标 SERVER_IPSERVER_PORT 电脑端 TCP Server K210 作为 TCP Client 主动连接这个地址

物理引脚是开发板连接外设的真实入口,功能映射决定这些引脚在程序中扮演什么角色。IO25 被注册为 GPIOHS0 后,就可以通过 WiFiManager.en.value() 控制 ESP8285 的使能状态。IO13 和 IO15 被注册为 UART2_TX、UART2_RX 后,K210 就可以通过 UART2 与 WiFi 模块交换数据。WiFi 连接成功后,network.ESP8285() 会把串口背后的模块封装成网络接口,socket.socket() 再基于这个网络接口完成 TCP 通信。

实验现象 正常表现 异常提示
WiFi 模块复位 串口打印 reset wifi module,随后模块返回 AT 响应 无响应时检查 EN、UART、供电和模块型号
WiFi 连接 串口打印 wifi connectedifconfig 信息 一直重试时检查 WiFi 名称、密码和路由器信号
TCP 连接 串口打印 tcp server connected 连接失败时检查电脑 IP、端口监听和防火墙
数据发送 电脑端 Server 收到 K210 online, count: x 电脑端无数据时检查 Socket 是否连接成功
数据接收 K210 串口打印 recv: 返回内容 无返回时检查 Server 是否有回显逻辑
异常重连 断线后程序关闭旧 Socket 并尝试重连 频繁重连时检查网络稳定性和 Server 状态

软件代码

本实验代码围绕 ESP8285 WiFi 初始化和 TCP Client 通信展开。程序先配置 WiFi 名称、密码、服务器 IP 和端口,再通过 WiFiManager 封装模块初始化、AT 指令检测、WiFi 连接和网络状态查询,通过 TCPClient 封装 Socket 连接、发送、接收和关闭逻辑。主程序负责把 WiFi 状态和 TCP 状态串联起来,实现断线检测、自动重连、定时发送和接收返回数据。

电脑端需要提前启动 TCP Server。可以手写一个 Python Server,也可以使用 AI 辅助生成一个简单服务程序。提示词可以直接围绕"K210、WiFi、TCP、Socket、Server"描述需求,例如:

text 复制代码
K210 ESP8285 WiFi TCP Socket 通信服务

如果想写得更短,可以使用:

text 复制代码
K210 WiFi TCP Socket 服务

如果用于文件夹或项目名,可以使用:

text 复制代码
k210_wifi_tcp_socket_server

如果用于说明文档标题,可以写成:

text 复制代码
CanMV K210 通过 ESP8285 连接电脑 TCP Server

实际生成电脑端 Server 时,需要让服务端监听电脑本机 IP 和代码中的端口,例如 60000。若服务端绑定 127.0.0.1,K210 这类局域网设备通常无法连接;更稳妥的方式是监听电脑局域网 IP 或 0.0.0.0,并确认防火墙允许局域网设备访问该端口。

软件环境 作用 检查重点
CanMV IDE 编辑、运行和调试 K210 程序 能识别开发板串口,并能正常运行基础程序
CanMV 固件 提供 UARTnetworksocket 等模块 固件环境需要支持 ESP8285 网络接口
电脑端 TCP Server 接收 K210 的 TCP 连接 需要先启动服务,并监听正确 IP 与端口
路由器局域网 让 K210 和电脑互通 电脑与 K210 需要处于同一局域网或可路由网络中
串口终端 查看 WiFi 和 TCP 状态 能看到复位、连接、发送、接收和重连日志
python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
CanMV K210 WiFi Socket TCP Client 通信实验

实验说明:
本程序让 CanMV K210 通过 ESP8285 WiFi 模块连接路由器,
再作为 TCP Client 主动连接电脑端 TCP Server,
实现开发板向电脑发送数据,并接收电脑返回的数据。

适用场景:
1. 智能硬件设备上报状态
2. 传感器数据上传到电脑
3. 电脑向开发板下发控制指令
4. K210 与上位机进行 TCP 通信实验
"""

from machine import UART
import time
import network
import socket
from maix import GPIO
from fpioa_manager import fm


# =========================
# WiFi 配置区
# =========================

WIFI_SSID = "wifi_name"          # WiFi 名称
WIFI_PASSWORD = "pass_word"      # WiFi 密码

SERVER_IP = "192.168.100.12"     # 电脑端 TCP Server IP
SERVER_PORT = 60000              # 电脑端 TCP Server 端口

SERVER_ADDR = (SERVER_IP, SERVER_PORT)

SEND_INTERVAL_MS = 1000          # 每次发送数据的间隔
WIFI_RETRY_COUNT = 5             # WiFi 连接重试次数
SOCKET_RETRY_DELAY_MS = 2000     # Socket 重连等待时间


# =========================
# ESP8285 WiFi 驱动封装
# =========================

class WiFiManager:
    uart = None
    en = None
    nic = None

    @staticmethod
    def init():
        """
        初始化 ESP8285 引脚和串口
        EN  引脚:IO25
        TX  引脚:IO13
        RX  引脚:IO15
        """
        fm.register(25, fm.fpioa.GPIOHS0, force=True)
        WiFiManager.en = GPIO(GPIO.GPIOHS0, GPIO.OUT)

        fm.register(13, fm.fpioa.UART2_TX, force=True)
        fm.register(15, fm.fpioa.UART2_RX, force=True)

        WiFiManager.uart = UART(
            UART.UART2,
            115200,
            timeout=1000,
            read_buf_len=8192
        )

    @staticmethod
    def enable(state):
        """控制 ESP8285 使能引脚"""
        WiFiManager.en.value(state)

    @staticmethod
    def at_cmd(cmd="AT\r\n", timeout=100):
        """
        发送 AT 指令并返回原始响应
        """
        if WiFiManager.uart is None:
            return None

        WiFiManager.uart.write(cmd)
        time.sleep_ms(timeout)
        return WiFiManager.uart.read()

    @staticmethod
    def check_at(cmd="AT\r\n", expect="OK\r\n", timeout=100):
        """
        发送 AT 指令并检查是否返回指定内容
        """
        data = WiFiManager.at_cmd(cmd, timeout)

        if data and data.endswith(expect):
            return True

        return False

    @staticmethod
    def reset(force=False, retry=5):
        """
        重置 ESP8285 模块
        """
        if force is False and WiFiManager.is_connected():
            return True

        WiFiManager.init()

        module_ready = False

        for i in range(retry):
            print("reset wifi module:", i + 1)

            WiFiManager.enable(False)
            time.sleep_ms(50)

            WiFiManager.enable(True)
            time.sleep_ms(600)

            if WiFiManager.check_at(timeout=500):
                module_ready = True
                break

        if not module_ready:
            print("wifi module no response")
            return False

        WiFiManager.check_at()
        WiFiManager.check_at(
            "AT+UART_CUR=921600,8,1,0,0\r\n",
            "OK\r\n",
            timeout=200
        )

        WiFiManager.uart = UART(
            UART.UART2,
            921600,
            timeout=1000,
            read_buf_len=10240
        )

        try:
            WiFiManager.nic = network.ESP8285(WiFiManager.uart)
            time.sleep_ms(500)
        except Exception as e:
            print("create wifi nic failed:", e)
            return False

        return True

    @staticmethod
    def connect(ssid, password, retry=5):
        """
        连接 WiFi
        """
        if WiFiManager.nic is None:
            if not WiFiManager.reset(force=True):
                return False

        for i in range(retry):
            print("connect wifi:", i + 1)

            try:
                WiFiManager.nic.connect(ssid, password)
                time.sleep_ms(1500)

                if WiFiManager.is_connected():
                    print("wifi connected")
                    print("ifconfig:", WiFiManager.ifconfig())
                    return True

            except Exception as e:
                print("wifi connect error:", e)

            time.sleep_ms(1000)

        return False

    @staticmethod
    def is_connected():
        """
        判断 WiFi 是否连接成功
        """
        if WiFiManager.nic is None:
            return False

        try:
            return WiFiManager.nic.isconnected()
        except Exception:
            return False

    @staticmethod
    def ifconfig():
        """
        获取网络信息
        """
        if WiFiManager.nic is None:
            return None

        try:
            return WiFiManager.nic.ifconfig()
        except Exception:
            return None


# =========================
# TCP Client 封装
# =========================

class TCPClient:
    def __init__(self, server_addr):
        self.server_addr = server_addr
        self.sock = None

    def connect(self):
        """
        连接 TCP Server
        """
        self.close()

        try:
            print("connect tcp server:", self.server_addr)

            self.sock = socket.socket()
            self.sock.settimeout(3)
            self.sock.connect(self.server_addr)
            self.sock.settimeout(1)

            print("tcp server connected")
            return True

        except Exception as e:
            print("tcp connect failed:", e)
            self.close()
            return False

    def send(self, text):
        """
        发送文本数据
        """
        if self.sock is None:
            return False

        try:
            if isinstance(text, str):
                text = text.encode("utf-8")

            self.sock.send(text)
            return True

        except Exception as e:
            print("send failed:", e)
            self.close()
            return False

    def receive(self, buf_size=512):
        """
        接收 TCP Server 返回的数据
        """
        if self.sock is None:
            return None

        try:
            data = self.sock.recv(buf_size)

            if data:
                return data

            print("server disconnected")
            self.close()
            return None

        except Exception:
            return None

    def close(self):
        """
        关闭 Socket
        """
        if self.sock:
            try:
                self.sock.close()
            except Exception:
                pass

        self.sock = None


# =========================
# 业务数据生成
# =========================

def make_device_message(count):
    """
    模拟智能硬件设备上报数据
    """
    message = "K210 online, count: {}\n".format(count)
    return message


# =========================
# 主程序
# =========================

def main():
    print("CanMV K210 TCP Client Demo Start")

    if not WiFiManager.reset(force=True):
        print("wifi module init failed")
        return

    if not WiFiManager.connect(WIFI_SSID, WIFI_PASSWORD, WIFI_RETRY_COUNT):
        print("wifi connect failed")
        return

    client = TCPClient(SERVER_ADDR)

    count = 0

    while True:
        if not WiFiManager.is_connected():
            print("wifi disconnected, reconnecting...")

            client.close()

            if not WiFiManager.connect(WIFI_SSID, WIFI_PASSWORD, WIFI_RETRY_COUNT):
                time.sleep_ms(SOCKET_RETRY_DELAY_MS)
                continue

        if client.sock is None:
            if not client.connect():
                time.sleep_ms(SOCKET_RETRY_DELAY_MS)
                continue

        count += 1
        message = make_device_message(count)

        print("send:", message)

        if not client.send(message):
            time.sleep_ms(SOCKET_RETRY_DELAY_MS)
            continue

        data = client.receive()

        if data:
            print("recv:", data)

        time.sleep_ms(SEND_INTERVAL_MS)


# =========================
# 程序入口
# =========================

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("program stopped")

这段程序可以分成三个层级。底层是 WiFiManager,负责 ESP8285 的 EN 控制、UART 初始化、AT 指令检测、网络接口创建和 WiFi 连接;中间层是 TCPClient,负责 Socket 连接、发送、接收和关闭;上层是 make_device_message()main(),负责生成设备上报内容,并把 WiFi 状态、Socket 状态和业务发送流程串联起来。

配置区集中保存 WiFi 名称、密码、服务器 IP、端口、发送间隔和重试次数。调试时最常修改的是 WIFI_SSIDWIFI_PASSWORDSERVER_IPSERVER_PORT。其中 SERVER_IP 应该填写电脑在局域网中的 IP 地址,不是路由器地址,也不是 127.0.0.1。电脑端 Server 的监听端口需要和 SERVER_PORT 保持一致。

函数名 功能 对应现象
WiFiManager.init() 初始化 ESP8285 引脚和 UART2 串口和使能引脚准备完成
WiFiManager.enable(state) 控制 ESP8285 EN 引脚 WiFi 模块被启用或复位
WiFiManager.at_cmd() 发送 AT 指令并读取响应 可判断模块是否有原始响应
WiFiManager.check_at() 检查 AT 指令是否返回预期内容 判断 ESP8285 是否正常响应
WiFiManager.reset() 重置 WiFi 模块并创建网络接口 模块完成复位,UART 速率切换到 921600
WiFiManager.connect() 连接指定 WiFi 串口打印 WiFi 连接状态和网络信息
WiFiManager.is_connected() 判断 WiFi 是否在线 主循环据此决定是否重连
WiFiManager.ifconfig() 获取网络配置 打印 IP、网关等网络信息
TCPClient.connect() 连接电脑端 TCP Server 串口显示 TCP Server 连接成功或失败
TCPClient.send() 发送文本数据 电脑端 Server 收到 K210 上报内容
TCPClient.receive() 接收服务器返回数据 K210 串口打印 recv: 返回内容
TCPClient.close() 关闭 Socket 网络异常后释放旧连接
make_device_message() 生成模拟设备上报数据 每次发送的计数值递增
main() 串联 WiFi、TCP 和业务发送流程 程序持续连接、发送、接收和重连

主程序从 main() 开始执行。程序会先重置 ESP8285,再连接 WiFi。WiFi 成功后创建 TCPClient 对象,并进入 while True 循环。循环内部会持续检查 WiFi 是否在线,如果 WiFi 断开,就关闭旧 Socket 并重新连接 WiFi;如果 Socket 不存在,就重新连接电脑端 TCP Server。网络链路可用后,计数器递增,程序生成一条设备上报消息并发送到服务器。如果服务器返回数据,开发板会把返回内容打印出来。

扩展应用

WiFi 与 TCP 通信实验涉及开发板、WiFi 模块、路由器、电脑 Server 和局域网环境,问题来源比单纯 GPIO 实验更多。排查时需要从模块响应、WiFi 参数、IP 地址、端口监听、防火墙和 Socket 状态几个方向逐步定位。

问题现象 可能原因 处理思路
串口提示 wifi module no response ESP8285 未正常启用、EN 引脚映射不对、UART 引脚不匹配 检查 IO25、IO13、IO15 的连接关系,确认 WiFi 模块供电正常,确认板卡是否使用相同引脚
一直显示 connect wifi 但无法成功 WiFi 名称或密码错误,路由器信号异常,模块未进入正常工作状态 检查 WIFI_SSIDWIFI_PASSWORD,确认开发板处于 WiFi 覆盖范围内
能连上 WiFi,但无法连接 TCP Server SERVER_IPSERVER_PORT 配置错误,电脑端 Server 没有启动 确认电脑 IP 是否与 SERVER_IP 一致,确认 Server 正在监听 SERVER_PORT
TCP 连接被拒绝 电脑端端口未监听,防火墙阻止连接 放行防火墙规则,确认 TCP Server 允许局域网设备连接
发送后电脑端没有收到数据 Socket 未连接成功,Server 接收逻辑异常,网络不通 观察串口是否打印 tcp server connected,在电脑端检查接收日志
能发送但收不到返回数据 电脑端 Server 没有回发内容,或回发格式不符合预期 在 Server 端加入回显逻辑,确认接收到数据后主动返回文本
程序频繁重连 WiFi 信号不稳定,服务器主动断开,Socket 超时较短 缩短网络距离,检查 Server 是否限制连接,适当调整 Socket 超时和重连间隔
ifconfig 信息为空 网络接口创建失败或 WiFi 未连接成功 观察 create wifi nic failed 和 WiFi 连接日志,确认 ESP8285 初始化流程正常
电脑端 Server 只监听本机 Server 绑定了 127.0.0.1 改为监听电脑局域网 IP 或 0.0.0.0
电脑 IP 变化 路由器重新分配 IP,代码中的 SERVER_IP 失效 重新查看电脑局域网 IP,并同步修改代码

TCP Client 通信实验的价值在于让开发板具备"主动上报"和"接收指令"的能力。很多智能硬件项目都不是孤立运行,而是需要把设备状态发送到上位机、服务器或控制平台中。当前代码虽然只发送模拟文本,但通信框架已经具备完整雏形,只要把 make_device_message() 中的内容替换成真实业务数据,就可以自然扩展到更多场景。

应用场景 实现思路 可扩展能力
设备在线状态上报 定时发送 K210 online 和计数信息 可扩展设备编号、电量、运行状态和故障码
传感器数据上传 将传感器采集结果拼接成字符串或 JSON 后发送 可上传温湿度、距离、光照、模拟量等数据
上位机远程控制 电脑端 Server 返回控制指令,K210 在 receive() 后解析执行 可扩展 LED、继电器、电机或蜂鸣器控制
AI 识别结果回传 将图像识别、目标检测或分类结果发送到电脑 可用于视觉识别日志、识别结果显示和上位机记录
设备运行日志采集 将关键运行阶段、异常信息和重连次数发送到 Server 可用于远程调试和设备状态追踪
局域网教学实验 使用电脑端 TCP Server 观察开发板发送的数据 适合讲解 Socket、客户端、服务端和网络调试流程
简易物联网原型 开发板作为终端节点,电脑作为控制中心 可继续扩展 Web 服务、数据库存储和可视化看板

从工程角度看,当前代码已经把网络通信拆成了较清晰的层次。WiFi 初始化集中在 WiFiManager 中,Socket 通信集中在 TCPClient 中,业务数据生成集中在 make_device_message() 中,主循环负责调度和异常恢复。这样的结构方便替换业务内容,例如把固定文本改成传感器数据,把简单回显改成指令解析,把串口打印改成设备状态机。后续项目变复杂时,不需要推翻整个程序,只需要在现有结构上增加数据格式、指令协议和硬件动作。

总结

本实验通过 CanMV K210 和 ESP8285 WiFi 模块完成了 TCP Client 通信流程,核心能力包括 FPIOA 引脚映射、GPIOHS 使能控制、UART2 串口通信、ESP8285 网络接口创建、WiFi 连接、Socket 客户端连接、文本数据发送、服务器返回数据接收和异常重连处理。代码从硬件引脚初始化开始,把串口 WiFi 模块封装成网络接口,再通过 Socket 与电脑端 TCP Server 建立通信,完整展示了开发板接入局域网并主动上报数据的过程。

这类实验适合作为智能硬件网络通信入门案例。串口中的字符串不再只是本地输出,而是可以通过 WiFi 发送到电脑端;循环计数不只是变量变化,而是变成设备持续在线的状态上报;异常处理也不只是打印错误,而是对应真实网络环境中的断线重连和连接恢复。后续课程可以在这个基础上继续扩展传感器采集、按键指令触发、LCD 状态显示、蜂鸣器报警、AI 摄像头识别结果上传、Web 控制和数据可视化,让 K210 从单机实验板逐步变成可联网、可交互、可远程管理的智能硬件节点。

相关推荐
dingzd951 小时前
Reddit验证资料测试之后跨境品牌如何提升社区运营可信度
大数据·人工智能·矩阵·新媒体运营·内容营销·跨境
JavaAgent架构师2 小时前
前端AI工程化(五):AI对话状态管理
前端·人工智能
aneasystone本尊2 小时前
给小龙虾上把锁:Sandbox 沙箱机制
人工智能
Σίσυφος19002 小时前
数据标准化(拟合的时候使用非常重要)
人工智能·算法
程序员码歌2 小时前
别再让 AI 自由发挥了:OpenSpec 才是团队协作不跑偏的关键
android·前端·人工智能
时光Autistic2 小时前
【安装教程】AI标注工具X-AnyLabeling安装配置
人工智能·python
knight_9___2 小时前
大模型project面试7
人工智能·python·算法·面试·大模型·agent
liudanzhengxi2 小时前
CRM系统技术文章
linux·服务器·网络·人工智能·新人首发
JavaAgent架构师2 小时前
前端AI工程化(六):Function Calling与RAG前端实践
前端·人工智能