ESP8266远程控制:实现网络通信与设备控制

news2025/6/3 4:14:14

概述:
最近一直在弄esp8266的网络通信,但是一直都还没搞懂到底esp8266可不可以通过连接一个网络过后,在很远的地方使用网络将其关掉

在网上找了两个教程都有程序,都跑通了

第一个
第二个找不到了,但是程序有

CSDN上放文件好像你们取不了,三连私聊找我取也可以

下面是获取资料的途径和开发工具的途径: https://docs.ai-thinker.com/esp8266
https://docs.ai-thinker.com/tools

有一篇文章提到:http://tcp.doit.am/
这个网站,你们可以打开看看,有一个网址是115开头的,这个IP地址的意思是你在给你esp8266写入AT指令时写入服务器的IP地址,也就是说,写入后,你的esp8266就连上的公用的IP只不过和别人使用的通道可能不同(还必须连一个网络才可以),然后你的手机端就可以通过输入信息到这个IP和通道就可以让esp8266接收信息了

ESP8266远程控制:实现网络通信与设备控制

一、背景与目标

在物联网项目中,远程控制设备是一个常见的需求。ESP8266作为一种低功耗、高性能的WiFi模块,被广泛应用于各种远程控制场景。本文将探讨如何通过ESP8266实现远程控制功能,特别是如何在连接到网络后,通过网络指令远程关闭设备。

二、实现远程控制的方案

(一)硬件与网络基础

ESP8266模块通过WiFi连接到网络,可以接收来自网络的指令来控制设备。为了实现远程控制,需要以下硬件和网络基础:

  • ESP8266模块:用于连接WiFi网络并接收控制指令。
  • 稳定的WiFi网络:ESP8266需要连接到一个可访问互联网的WiFi网络。
  • 云平台或服务器:用于转发控制指令到ESP8266模块。

(二)云平台的选择

在实现远程控制时,选择一个可靠的云平台至关重要。云平台的作用是作为中间人,转发手机或电脑发送的指令到ESP8266模块。Doit.am远程信息转发服务是一个不错的选择,它提供了简单的使用步骤和稳定的转发服务。

(三)编程实现

1. 连接到WiFi网络

首先,需要让ESP8266连接到一个WiFi网络。这可以通过发送AT指令AT+CWJAP来实现,指定WiFi的名称和密码。

char c[]="AT+CWJAP=\"WIFI名称\",\"WIFI密码\"";
esp8266_send_cmd1((u8 *)c);
2. 建立TCP连接

连接到WiFi后,需要建立一个TCP连接到云平台提供的服务器。使用AT+CIPSTART命令来建立连接,指定服务器的IP地址和端口号。

char e[]="AT+CIPSTART=0,\"TCP\",\"IP地址\",端口号";
esp8266_send_cmd1((u8 *)e);
3. 接收与处理控制指令

一旦TCP连接建立,ESP8266就可以接收来自云平台转发的控制指令。通过串口接收中断服务函数,可以实时接收并处理这些指令。

void USART3_IRQHandler(void)
{
    u8 res;
    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
    {
        res =USART_ReceiveData(USART3);
        if(res != 'A')                     //以‘A’为结束位,收到‘A’表示一次接收消息完成
        {
            if((USART3_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据
            {
                USART3_RX_BUF[USART3_RX_STA++]=res;	//记录接收到的值
            }
            else
            {
                USART3_RX_STA|=1<<15;				//没有收到结束符‘A’,收到的字节数>=0x80,强制标记接收完成
            }
        }
        else
        {
            USART3_RX_STA|=1<<15;				//接收消息完成
        }
    }
}

在主函数中,根据接收到的指令控制设备。例如,收到"on"指令时打开LED,收到"off"指令时关闭LED。

int main(void)
{
    USART_Config();
    delay_init();
    LED_Init();

    usart3_init(115200);

    esp8266_start_trans();

    printf("初始化完成\n");

    USART3_RX_STA=0;
    while(1)
    {
        if(USART3_RX_STA&0x8000)   //如果消息接收完成,则处理
        {
            if(strstr((const char*)USART3_RX_BUF,"on"))  //这里是看接收到的消息中有没有自己设置的命令“on”
            {
                GPIO_ResetBits(GPIOC,GPIO_Pin_13);
            }
            if(strstr((const char*)USART3_RX_BUF,"off"))
            {
                GPIO_SetBits(GPIOC,GPIO_Pin_13);
            }
            USART3_RX_STA=0;    //消息处理完成,开始重新接收
            memset(USART3_RX_BUF,0,600);         //将接收区清0
        }
    }
}

(四)开发工具与资源

为了方便开发,可以使用以下工具和资源:

  • SDK一体化开发环境:支持ESP32和ESP8266的开发,可以从安信可科技获取。
  • 烧录工具:用于烧录WiFi固件,可以从安信可科技下载。
  • 串口调试助手:用于调试串口通信,可以从安信可科技获取。

三、测试与验证

(一)测试环境搭建

  1. 连接ESP8266到WiFi网络:确保ESP8266能够成功连接到指定的WiFi网络。
  2. 建立TCP连接:使用云平台提供的IP地址和端口号,建立TCP连接。
  3. 发送控制指令:通过手机或电脑端的网络调试助手,发送控制指令到ESP8266。

(二)测试结果

通过测试,验证了ESP8266模块可以成功连接到WiFi网络,并通过云平台接收来自手机或电脑的控制指令。当发送"on"指令时,LED灯亮起;发送"off"指令时,LED灯熄灭。

请添加图片描述
在这里插入图片描述

如果需要手机端或者电脑端网络调试软件的可以三连支持一下,私信我获取

在这里插入图片描述
使用ESP8266模块连接到一个特定的TCP服务器,这个服务器是由http://tcp.doit.am/提供的远程信息转发服务。
使用AT+CIPSTART命令用于建立一个TCP或UDP连接。

AT+CIPSTART=<id>,"<type>","<ip_addr>",<port>

使用这个特定的IP和端口可以确保您的ESP8266模块能够连接到这个公共服务器,并与其他客户端进行通信。

如果你想要用APP或者网页来控制你的esp8266,你需要创建一个自己的IP

在这里插入图片描述
这是我自己做的一个网页

如果需要这个网页可以私信我获取

通过这个网页向esp8266发送请求对IO口进行控制拉高或者拉低

四、总结与展望

本文介绍了如何使用ESP8266模块实现远程控制功能。通过连接到WiFi网络和云平台,ESP8266可以接收来自网络的控制指令,并根据指令控制设备。未来,可以进一步优化控制逻辑,增加更多的控制功能,如温度监控、湿度监控等,以满足更多的应用场景需求。


如果您需要获取相关代码或进一步的帮助,可以通过私信联系我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2394935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习基础】机器学习入门核心算法:隐马尔可夫模型 (HMM)

机器学习入门核心算法&#xff1a;隐马尔可夫模型 &#xff08;HMM&#xff09; 一、算法逻辑与核心思想二、算法原理与数学推导核心问题与算法推导 三、模型评估四、应用案例1. 语音识别 (Speech Recognition)2. 自然语言处理 (Natural Language Processing - NLP)3. 手写体识…

Leetcode 2819. 购买巧克力后的最小相对损失

1.题目基本信息 1.1.题目描述 现给定一个整数数组 prices&#xff0c;表示巧克力的价格&#xff1b;以及一个二维整数数组 queries&#xff0c;其中 queries[i] [ki, mi]。 Alice 和 Bob 去买巧克力&#xff0c;Alice 提出了一种付款方式&#xff0c;而 Bob 同意了。 对于…

AI炼丹日志-25 - OpenAI 开源的编码助手 Codex 上手指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 大数据篇 300&#xff1a; Hadoop&…

C# 类和继承(使用基类的引用)

使用基类的引用 派生类的实例由基类的实例和派生类新增的成员组成。派生类的引用指向整个类对象&#xff0c;包括 基类部分。 如果有一个派生类对象的引用&#xff0c;就可以获取该对象基类部分的引用&#xff08;使用类型转换运算符把 该引用转换为基类类型&#xff09;。类…

进程间通信(消息队列)

目录 一 原理 二 API 1. ftok 2. msgget 3. msgctl 4. msgsnd 5. msgrcv 三 demo代码 四 基于责任链模式和消息队列对数据处理 1. 什么是责任链模式 2. 下面基于责任链模式来对消息队列获取的消息进行处理 前置 其实system v 版本的进程间通信&#xff0c;设计的接…

Nginx--手写脚本压缩和切分日志(也适用于docker)

原文网址&#xff1a;Nginx--手写脚本压缩和切分日志&#xff08;也适用于docker&#xff09;_IT利刃出鞘的博客-CSDN博客 简介 本文介绍nginx如何手写脚本压缩和切分日志。 1.创建切分日志的脚本 创建脚本文件&#xff1a;/work/tmp/nginx-log_sh&#xff08;后边要用run-…

OpenCv高阶(十八)——dlib人脸检测与识别

文章目录 一、dlib库是什么&#xff1f;二、opencv库与dlib库的优缺点对比1、opencv优缺点2、dlib库优缺点 三、dlib库的安装1、在线安装2、本地安装 四、dlib库的人脸检测器1. 基于 HOG 的检测器2. 基于 CNN 的检测器 五、dlib人脸检测的简单使用1、导入必要库2、初始化人脸检…

中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航

作者&#xff1a;Hengxing Cai 1 , 2 ^{1,2} 1,2, Jinhan Dong 2 , 3 ^{2,3} 2,3, Jingjun Tan 1 ^{1} 1, Jingcheng Deng 4 ^{4} 4, Sihang Li 2 ^{2} 2, Zhifeng Gao 2 ^{2} 2, Haidong Wang 1 ^{1} 1, Zicheng Su 5 ^{5} 5, Agachai Sumalee 6 ^{6} 6, Renxin Zhong 1 ^{1} …

WIN11+CUDA11.8+VS2019配置BundleFusion

参考&#xff1a; BundleFusion:VS2019 2017 ,CUDA11.5,win11&#xff0c;Realsense D435i离线数据包跑通&#xff0c;环境搭建 - 知乎 Win10VS2017CUDA10.1环境下配置BundleFusion - 知乎 BundleFusionWIN11VS2019 CUDA11.7环境配置-CSDN博客 我的环境&#xff1a;Win 11…

WPF prism

Prism Prism.Dryloc 包 安装 Nuget 包 - Prism.DryIoc 1. 修改 App.xaml 修改 App.xaml 文件&#xff0c;添加 prism 命名空间, 继承由 Application → PrismApplication&#xff0c;删除默认启动 url, StartupUri“MainWindow.xaml” <dryioc:PrismApplicationx:Class…

[Redis] Redis:高性能内存数据库与分布式架构设计

标题&#xff1a;[Redis] 浅谈分布式系统 水墨不写bug 文章目录 一、什么是Redis&#xff1f;一、核心定位二、核心优势三、典型应用场景四、Redis vs 传统数据库 二、架构选择与设计1、单机架构&#xff08;应用程序 数据库服务器&#xff09;2、应用程序和数据库服务器分离3…

React 第四十九节 Router中useNavigation的具体使用详解及注意事项

前言 useNavigation 是 React Router 中一个强大的钩子&#xff0c;用于获取当前页面导航的状态信息。 它可以帮助开发者根据导航状态优化用户体验&#xff0c;如显示加载指示器、防止重复提交等。 一、useNavigation核心用途 检测导航状态&#xff1a;判断当前是否正在进行…

【JavaEE】Spring事务

目录 一、事务简介二、Spring事务的实现2.1 事务的操作2.2 分类2.2.1 Spring编程式事务2.2.2 Spring 声明式事务 Transactional2.2.2.1 Transactional 详解2.2.2.1.1 rollbackFor2.2.2.1.2 Isolation2.2.2.1.3 propagation 一、事务简介 事务&#xff1a;事务是⼀组操作的集合…

Android15 userdebug版本不能remount

背景描述&#xff1a; 最近调试Android Vendor Hal的时候发现一个奇怪的现象: android userdebug版本刷到设备中&#xff0c;执行adb root没提示错误&#xff0c;但是没有获取到root权限。 Android设备运行的系统版本有三种情况&#xff1a;user版本、userdebug版本和eng版本…

R包安装报错解决案例系列|R包使用及ARM架构解决data.table安装错误问题

有不少同学是Mac系统的&#xff0c;分析过程中会发现部分R包总是安装不成功&#xff0c;这是因为部分R包基于windowsx86架构编译的&#xff0c;最常见的就是含 C/C/Fortran 的包&#xff0c;对于初学者都是建议linux和win去做&#xff0c;Windows 通常直接安装预编译好的二进制…

Linux上安装MongoDB

目录 一、在Linux系统安装MongoDB服务器 1、下载MongoDB 2、上传MongoDB并解压 3、创建必要目录 4、配置环境变量 5、创建配置文件 6、启动命令 7、验证安装 二、在Linux系统安装MongoDB客户端Shell 1、下载MongoDB Shell 2、上传MongoDB Shell并解压 3、配置环境变…

Redis最佳实践——安全与稳定性保障之访问控制详解

Redis 在电商应用的安全与稳定性保障之访问控制全面详解 一、安全访问控制体系架构 1. 多层级防护体系 #mermaid-svg-jpkDj2nKxCq9AXIW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jpkDj2nKxCq9AXIW .error-ico…

【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用

文章概述 本文介绍了如何在 华为开发者空间 中快速部署并使用 Ollama 模型运行框架&#xff0c;并结合 deepseek-r1 模型进行本地或远程交互推理。内容涵盖环境准备、模型配置、网卡绑定、内网穿透、API调用等多个环节&#xff0c;适合希望在华为云上快速搭建本地类大模型推理…

STM32之IIC(重点)和OLED屏

内部集成电路概述 基本概念 内部集成电路&#xff08;Inter Integrated Circuit&#xff09;的简称叫做IIC或者I2C&#xff0c;是一种简单的、半双工同步通信的串行通信接口&#xff0c;IIC总线是上世纪80年代&#xff08;1982年&#xff09;由飞利浦公司设计出来&#xff0c…

学习海康VisionMaster之表面缺陷滤波

一&#xff1a;进一步学习了 今天学习下VisionMaster中的表面缺陷滤波&#xff1a;简单、无纹理背景的表面缺陷检测&#xff0c;可以检测表面的异物&#xff0c;缺陷&#xff0c;划伤等 二&#xff1a;开始学习 1&#xff1a;什么表面缺陷滤波&#xff1f; 表面缺陷滤波的核心…