Arduino应用开发——TCP/IP无线传输

目录

  • Arduino应用开发——TCP/IP无线传输
    • 前言
    • 1 硬件简介
    • 2 Arduino环境搭建
    • 3 建立TCP Server
    • 4 编写代码并运行测试
    • 结束语

前言

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

TCP可以分为服务端(TCP Server)和客户端(TCP Client),服务端就相当于一个服务器,可以允许接入多个客户端接入,接入之后相互之间就可以通过TCP协议进行数据传输。
关于TCP具体的原理介绍就不细说了,本文主要讲解Arduino环境下怎么使用TCP来实现一个无线网络的数据传输。
我们的MCU(esp8266或者esp32)可以作为服务端,也可以作为客户端,看具体的需求来选。这里只讲解PC端作为服务端,MCU这边作为客户端的情况。其他情况举一反三即可。

本文主要实现的功能如下:

1 硬件简介

我这里以ESP8266和ESP32为例讲解,实际上根据自己的MCU选择一种即可,方法和原理都是一样的。
硬件配置如下:

模块 型号 说明
ESP8266 ESP-12F 这是安信可的一款模组,内部主要是用乐鑫的ESP8266EX再加上一个片外FLASH组成,开发板型号是NodeMCU-12F(CH340版本)
ESP32 ESP-WROOM-32 MCU是乐鑫的一款芯片,开发板型号ESP32 DEVKITV1

具体的硬件参数和电路原理图这里就不发出来了,不同厂家做的开发板引脚可能会有点差别。

2 Arduino环境搭建

关于Arduino的环境搭建大家应该都懂,这里就不多赘述了,不懂的同学可以参考一下我之前发的博客。
esp8266开发入门教程(基于Arduino)——环境安装
ESP32 Arduino开发环境搭建
使用VS code搭建Arduino IDE环境

3 建立TCP Server

在PC端测试的时候我们可以使用网络调试工具来建立一个服务端,网络调试工具网上都有很多,我比较习惯用NetAssist和sscom,sscom是串口和TCP一体的,既可以调试串口又可以调试网络,这个还是挺方便的,所以我这里就以sscom为例来讲解吧。
当然了,用这种方式建立的服务器是有限制的,只有同一局域网下的设备能连上这个服务器,如果你有公网服务器那就最好了,可以不受限与局域网。

找不到工具的同学可以到我网盘上下载。
网盘链接:https://pan.baidu.com/s/1cATkEnPX1iIX9U64wrflsw
提取码:1ysz

1)打开sscom,配置端口参数

参数
端口号 TCPServer
远程 不用配置
本地 选择自己的电脑的本地IP地址,端口任意,如:192.168.43.128, 1234


提示:不知道IP地址的可以在网络适配器查找。

2)点击 “侦听”,然后等待client接入

如果有设备连接上,会有提示信息。
当然了,现在这里肯定不会有这个信息,因为我们的设备还没有配置WIFI和TCP client,等后面我们把代码烧录进去就能连上了。

4 编写代码并运行测试

在Arduino IDE的ESP8266和ESP32开发板库里面其实都有TCP相关的示例代码,我在这个示例的基础上做了一点修改,增加了串口和TCP的数据互传。
ESP8266和ESP32的库是不同的,但是TCP相关库函数的基本用法是一样的,我这个示例代码做了ESP8266和ESP32的兼容,可以通用。

ESP8266和ESP32 TCP测试示例代码如下:

/*This sketch establishes a TCP connection to a "quote of the day" service.It sends a "hello" message, and then prints received data.
*/#ifdef ESP8266
#include <ESP8266WiFi.h>   // esp8266
#else
#include <WiFi.h>          // esp32
#endif#ifndef STASSID
#define STASSID "mate40"
#define STAPSK  "123456789"
#endifconst char* ssid     = STASSID;
const char* password = STAPSK;const char* host = "192.168.43.128";
const uint16_t port = 1234;void setup() {Serial.begin(115200);// We start by connecting to a WiFi networkSerial.println();Serial.println();Serial.print("Connecting to ");Serial.println(ssid);/* Explicitly set the ESP8266 or ESP32 to be a WiFi-client, otherwise, it by default,would try to act as both a client and an access-point and could causenetwork-issues with your other WiFi-devices on your WiFi-network. */WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());
}void loop() {static bool wait = false;Serial.print("connecting to ");Serial.print(host);Serial.print(':');Serial.println(port);// Use WiFiClient class to create TCP connectionsWiFiClient client;if (!client.connect(host, port)) {Serial.println("connection failed");delay(5000);return;}// This will send a string to the serverSerial.println("sending data to server");if (client.connected()) {client.println("hello from ESP8266");}#if 0// wait for data to be availableunsigned long timeout = millis();while (client.available() == 0) {if (millis() - timeout > 5000) {Serial.println(">>> Client Timeout !");client.stop();delay(60000);return;}}
#endif// Read all the lines of the reply from server and print them to SerialSerial.println("receiving from remote server");while (client.connected() || client.available() || Serial.available()) {while (Serial.available()) {char data;data = Serial.read();if (client.connected()) {client.print(data);}}while (client.available()) {char ch = static_cast<char>(client.read());Serial.print(ch);}}#if 1// Close the connectionSerial.println();Serial.println("closing connection");client.stop();
#endifif (wait) {delay(300000); // execute once every 5 minutes, don't flood remote service}wait = true;
}

注意:示例代码里面有几个地方需要根据自己的实际情况修改之后才能正常使用。还有电脑和设备(esp8266或esp32)要在同一个局域网下,不懂什么是局域网的话可以把电脑和设备连接到同一个WIFI下。

参数
STASSID 你的WIFI名称,示例:“test”
STAPSK 你的WIFI密码,示例:“12345678”
host 服务器地址,也就是你建立TCP Server时设置的IP地址,示例:“192.168.43.128”
port 服务器端口,也就是你建立TCP Server时设置的端口,示例:1234

esp8266运行测试如下:
连接esp8266的串口,方便打印设备运行的信息,这样就可以更好的看到TCP连接的情况。
打开TCP Server,等待设备连接,如果这个时候MCU已经连上了WIFI并且可以访问到这个服务端的话,就能连接上。

TCP成功连接之后,就可以互发数据了。esp8266会将串口接收到的数据转发到TCP Server,TPC Server发送过来的数据转发到串口发送给PC端。

esp32运行测试如下:
esp32的运行结果和esp8266是完全一样的。

结束语

好了,关于Arduino TCP/IP的编程和使用方法就讲到这里。因为时间的关系,我没有做TCP数据传输速度的测试,以后有时间的话再补上吧(如果还记得的话​

Arduino应用开发——TCP/IP无线传输相关推荐

  1. linux下IPROTO_TCP,TCP/IP协议栈在Linux内核中的运行时序分析

    可选题目三:TCP/IP协议栈在Linux内核中的运行时序分析 在深入理解Linux内核任务调度(中断处理.softirg.tasklet.wq.内核线程等)机制的基础上,分析梳理send和recv过 ...

  2. socket与tcp/ip编程

    Socket接口是TCP/IP网络的API ,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socke ...

  3. Socket TCP/IP 通信实例

    什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程, ...

  4. python web开发 网络编程 TCP/IP UDP协议

    文章目录 1. TCP/IP协议 1.1 IP协议 1.2 TCP协议 2. UDP协议 3. Socket 4. TCP编程 4.1 创建TCP服务器 4.2 创建TCP客户端 4.3 简易聊天工具 ...

  5. SOCK开发之---TCP/IP简介

    在开发通信程序之前,都要先确定这些程序相互通信所使用的协议(protocol),在深入设计前,我们都需要先从高层次来判断通信由哪个程序发起以及相应在何时产生. 举例来说,一般认为web服务器是一个长时 ...

  6. LabVIEW Arduino TCP/IP远程智能家居系统(项目篇—5)

    目录 1.项目概述 2.项目架构 3.传感器选型 3.1.气体传感器 3.2.温度传感器 3.3.热释电红外传感器 3.4.继电器 4.硬件环境 5.Arduino功能设计 ​6.LabVIEW功能设 ...

  7. C#上位机通过TCP/IP完全控制YAMAHA四轴机器人开发

    经过几个月的开发终于完全实现通过上位机C#通过TCP/IP实现YAMAHA 4轴机器人RCX340控制器的完全控制(完全不需要写机器人代码). 包括:1,点位完全放到上位机,机器人可以通过上位机实现手 ...

  8. 基于TCP/IP协议的物联网安卓应用开发基础教程(Android Studio开发)

    [华为云IOT物联网论坛外部版主:中华小能能] 第0章 简介 大家好,在上上上期发布的教程中,教大家如何利用Android Studio开发出一款接入华为云物联网平台并调用相关API完成设备属性查询. ...

  9. 威纶通屏幕(HMI)开发基本教程三:如何新建一个工程(modbus Tcp/Ip 工程)

    1.下载和安装EasyBuilder Pro,下载地址 :http://www.weinview.cn/ServiceSupport/Download/Index.aspx 2.打开Utility M ...

  10. TCPIP技术实验大作业:基于TCP/IP的程序开发技术综述及应用实践

    一.基于TCP/IP的程序开发技术综述 1.1TCP/IP协议族简介 TCP/IP也被称作传输控制协议/网际协议,作为网络互连的核心协议,受到广泛的应用.该协议类型作为开放性的标准应用在各种计算机中, ...

最新文章

  1. Alibaba Sentinel限流功能
  2. ListActivity的onListItemClick不响应的解决办法
  3. linux 系统监控和进程管理
  4. 你做过的项目会逐渐形成你自己的认知和别人对于你的看法~剑桥工程硕士陶瓷有感
  5. 如何用纯 CSS 创作一盘传统蚊香
  6. 属格-my father's car和whose_32
  7. 音视频开发(10)---nginx-rtmp视频流服务器搭建
  8. MySql字符串截取之substring_index
  9. linux 版本信息 64位,Centos查看版本信息
  10. Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述
  11. 《Cisco安全防火墙服务模块(FWSM)解决方案》——2.6 硬件架构
  12. gofpdf 学习笔记
  13. 超人能一拳把某个人打出地球吗?
  14. 蚂蚁区块链第10课 可信计算及TEE硬件隐私合约链智能合约开发实践
  15. 卸载微软的拼音输入法
  16. 联想R7000P莫名其妙黑屏问题记录
  17. 区块链数据资源网站总结
  18. 《筱静观察》第三季第12期丨区块链赋能数字政府
  19. Ryan二号的控制界面
  20. 金融领域数据模型实例

热门文章

  1. 接口请求 Provisional headers are shown
  2. 发卡源码php,PHP发卡源码|荔枝发卡系统2.0
  3. es 修改mapping
  4. Es的mapping映射
  5. 【前端面试题】数据类型-js
  6. 高考数学三角函数解题技巧 三角函数的图象与性质(高考题)
  7. linux 通过ln -s建立链接文件后,如何通过链接文件查看源文件
  8. js方法禁止查看源文件、防止复制、禁止右键、防被框架的方法总结
  9. 傲腾readyboost_使用SD卡和ReadyBoost提升上网本速度
  10. gps性能测试软件,VisualGPSXP入门 专业GPS测试软件