当前位置: 首页 > news >正文

微信小程序通过服务器控制ESP8266

声明

本文实现了ESP8266、微信小程序、个人服务器三者互相通信,并且小程序能发消息给微信用户

本文所有代码和步骤均为亲测有效

以下代码均为从网上搜索到后本人加以改动的,并非完全原创,若作者希望删除可联系我

ESP8266与个人服务器通信

ESP8266配置

通过串口通信使用AT指令控制ESP8266,AT指令详细讲解网上很多,自行搜索

复位:

AT+RST\r\n

连接wifi:

AT+CWJAP="601_2.4G","tddsqdhgq15"\r\n

检查ip:

AT+CIFSR\r\n

链接个人服务器,x.x.x.x为个人服务器的公网IP地址,y为个人服务器开放的通信端口:

AT+CIPSTART="TCP","x.x.x.x",y\r\n

ESP8266向个人服务器发送15个字符:

AT+CIPSEND=15\r\n

个人服务器配置

建立tcp_server.cpp文件。

#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <linux/tcp.h>#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/shm.h>#include <pthread.h>#define PORT  8888
#define QUEUE_SIZE   10
#define BUFFER_SIZE 1024#define CHECK_ERROR(sts, status) {if (sts) {printf("CHECK_ERROR:%d %d %d\n%s\n", __FILE__, __FUNCTION__, __LINE__);return status;}}int total_device_num = 0;struct DEVICE_T
{int sockfd;int id;pthread_t tid;char reserved[16];
};DEVICE_T device_t[1000];//传进来的sockfd,就是互相建立好连接之后的socket文件描述符
//通过这个sockfd,可以完成 [服务器]<--->[8266] 互相收发数据void *strPrintf(void *args)
{int sockfd = *((int *)args);char buffer[BUFFER_SIZE];char device_id_string[10];memset(device_id_string, 0, 10);pid_t pid = pthread_self();unsigned int i = 10, j = 0;while(1){memset(buffer,0,sizeof(buffer));//printf("listening sockfd %d\n", sockfd);int len = recv(sockfd, buffer, sizeof(buffer),0);if(strcmp(buffer,"exit\n")==0){printf("child process: %d exited.\n",pid);break;}printf("sockfd:%d receive:%s\n",sockfd,buffer);if ( buffer[0] == 'd' ){for(i = 10; buffer[i] != '_'; i ++)//device_id_123_{if (i > 19){printf("error:i > 24\n");exit(0);}device_id_string[i - 10] = buffer[i];}printf("sockfd:%d id %d\n", sockfd,atoi(device_id_string));for (i = 0; i < total_device_num; i ++){if (sockfd == device_t[i].sockfd){break;}}device_t[i].id = atoi(device_id_string);printf("\n\n\n\n↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 发生设备绑定 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓\n");printf("此设备:编号 %d id %d sockfd %d\n", i, device_t[i].id, device_t[i].sockfd);printf("已经连接的设备总数: %d\n", total_device_num);printf("所有设备信息如下:\n");for (j = 0; j < total_device_num; j ++){printf("device[%d] id %d sockfd %d tid %d\n", j, device_t[j].id, device_t[j].sockfd, device_t[j].tid);}printf("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑\n\n\n\n");}// fputs(buffer, stdout);struct tcp_info info;int len_tcp_info = sizeof(info);getsockopt(sockfd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t*)&len_tcp_info);int sts_getsockopt = getsockopt(sockfd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t*)&len_tcp_info);printf("设备:编号 %d id %d socket %d tcp状态 %d getsockopt返回值 %d\n", i, device_t[i].id, device_t[i].sockfd, info.tcpi_state, sts_getsockopt);if((info.tcpi_state != 1)|| (sts_getsockopt != 0))  //则说明未断开  else 断开{printf("已经断开链接!!\n");if (total_device_num == 1){device_t[0].id 		= 0;device_t[0].sockfd 	= 0;device_t[0].tid 	= 0;}else{device_t[i].id 		= device_t[total_device_num - 1].id;device_t[i].sockfd 	= device_t[total_device_num - 1].sockfd;device_t[i].tid 	= device_t[total_device_num - 1].tid;device_t[total_device_num - 1].id 		= 0;device_t[total_device_num - 1].sockfd 	= 0;device_t[total_device_num - 1].tid 		= 0;}total_device_num --;close(sockfd);pthread_exit((void **)"线程关闭\n");}else{printf("发送消息:%s\n", buffer);send(sockfd, buffer, len, 0);  //将接收到数据发送回去}}close(sockfd);
}int main(int argc, char **argv)
{int err,i ;pthread_t ntid;//建立本cpp与php之间的通信,此线程一直保存err = pthread_create(&ntid, NULL, PHP_and_TcpServer, NULL);if (err != 0)printf("can't create thread: %d\n", err);//定义IPV4的TCP连接的套接字描述符int server_sockfd = socket(AF_INET,SOCK_STREAM, 0);//定义sockaddr_in

相关文章:

微信小程序通过服务器控制ESP8266

声明 本文实现了ESP8266、微信小程序、个人服务器三者互相通信,并且小程序能发消息给微信用户 本文所有代码和步骤均为亲测有效 以下代码均为从网上搜索到后本人加以改动的,并非完全原创,若作者希望删除可联系我 ESP8266与个人服务器通信 ESP8266配置 通过串口通信使用…...

题目 1434: 蓝桥杯历届试题-回文数字

题目描述: 观察数字&#xff1a;12321&#xff0c;123321 都有一个共同的特征&#xff0c;无论从左到右读还是从右向左读&#xff0c;都是相同的。这样的数字叫做&#xff1a;回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求&#xff1a; 该数字的各个数位…...

访问修饰符、Object(方法,使用、equals)、查看equals底层、final--学习JavaEE的day15

day15 一、访问修饰符 含义&#xff1a; 修饰类、方法、属性&#xff0c;定义使用的范围 理解&#xff1a;给类、方法、属性定义访问权限的关键字 注意&#xff1a; ​ 1.修饰类只能使用public和默认的访问权限 ​ 2.修饰方法和属性可以使用所有的访问权限 访问修饰符本类本包…...

『大模型笔记』最大化大语言模型(LLM)的性能(来自OpenAI DevDay 会议)

最大化大语言模型(LLM)的性能(来自OpenAI DevDay 会议) 文章目录 一. 内容介绍1.1. 优化的两个方向(上下文优化和LLM优化)1.2. 提示工程:从哪里开始1.3. 检索增强生成:拓展知识边界1.4. 微调:专属定制二. 参考文献一. 内容介绍 简述如何以可扩展的方式把大语言模型(LLMs)…...

深度学习:开启你的AI探索之旅

在这个信息爆炸的时代,人工智能(AI)已经渗透到我们生活的方方面面,从智能语音助手到自动驾驶汽车,从智能推荐系统到医疗影像诊断,AI的身影无处不在。而深度学习,作为AI领域的一大核心技术,更是引领着这场科技革命的浪潮。那么,如何入门深度学习,踏上这趟充满挑战与机…...

第十四届蓝桥杯大赛B组 JAVA 蜗牛 (递归剪枝)

题目描述&#xff1a; 这天&#xff0c;一只蜗牛来到了二维坐标系的原点。 在 x 轴上长有 n 根竹竿。它们平行于 y 轴&#xff0c;底部纵坐标为 0&#xff0c;横坐标分别为 x1, x2, …, xn。竹竿的高度均为无限高&#xff0c;宽度可忽略。蜗牛想要从原点走到第 n 个竹竿的底部也…...

基于React低代码平台开发:构建高效、灵活的应用新范式

文章目录 一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望《低代码平台开发实践&#xff1a;基于React》编辑推荐内容简介作者简介目录前言为什么要写这本书 读者对象如何阅读本书 随着数字化转型的深入&…...

在Linux部署Docker并上传静态资源(快速教程)

Nginx快速上手 安装必要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2设置Docker仓库 通过以下命令添加Docker的官方仓库到yum源中&#xff1a; yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装Dock…...

【场景测试用例】带有广告图案的纸杯

从以下几个纬度出发考虑&#xff1a; 功能 是否可以承载液体&#xff0c;热水&#xff0c;温水&#xff0c;冰水是否可以承载非液体类的物品容量&#xff0c;空杯&#xff0c;半杯&#xff0c;满杯 UI 广告图案设计是否合理 性能 最大承受的容量内不漏水(负载测试)最大承受的温…...

《TCP/IP详解 卷一》第10章 UDP 和 IP 分片

目录 10.1 引言 10.2 UDP 头部 10.3 UDP校验和 10.4 例子 10.5 UDP 和 IPv6 10.6 UDP-Lite 10.7 IP分片 10.7.1 例子&#xff1a;IPV4 UDP分片 10.7.2 重组超时 10.8 采用UDP的路径MTU发现 10.9 IP分片和ARP/ND之间的交互 10.10 最大UDP数据报长度 10.11 UDP服务器…...

MyBatisPlus(SpringBoot版)的分页插件

目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖&#xff0c;改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP&#xff08;mybatisplus&#xff09;的分页插件 二、使…...

【小沐学QT】QT学习之信号槽使用

文章目录 1、简介2、代码实现2.1 界面菜单“转到槽”方法2.2 界面信号槽编辑器方法2.3 QT4.0的绑定方法2.4 QT5.0之后的绑定方法2.5 C11的方法2.6 lamda表达式方法2.7 QSignalMapper方法 结语 1、简介 在GUI编程中&#xff0c;当我们更改一个小部件时&#xff0c;我们通常希望…...

SpringMVC总结

SpringMVC SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装。 对于SpringMVC我们主要学习如下内容: SpringMVC简介 请求与响应 REST风格 SSM整合(注解版) 拦截器 SpringMVC是处理Web层/表现层的框架&#xff…...

JS一些重要函数

防抖函数 避免短时间内的函数多次调用影响性能 function debounce(func , wait){let timer;return (...args) > {clearTimeout(timer);timer setTimeout(() > {return func(args)} , wait)} } 函数柯里化 将多参函数以单参的形式传递 function curry(fn){return func…...

基于视觉识别的自动采摘机器人设计与实现

一、前言 1.1 项目介绍 【1】项目功能介绍 随着科技的进步和农业现代化的发展&#xff0c;农业生产效率与质量的提升成为重要的研究对象。其中&#xff0c;果蔬采摘环节在很大程度上影响着整个产业链的效益。传统的手工采摘方式不仅劳动强度大、效率低下&#xff0c;而且在劳…...

算法D32 | 贪心算法2 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II 本题解法很巧妙&#xff0c;大家可以看题思考一下&#xff0c;在看题解。 代码随想录P 只收集每天的正利润&#xff0c;利润可以每天分解。 Python: class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices)<2: retur…...

【iOS ARKit】协作 Session 实例

协作 Session 使用注意事项 协作 Session 是在 ARWorldMap 基础上发展起来的技术&#xff0c;ARWorldMap 包含了一系列的地标、ARAnchor 及在观察这些地标和 ARAnchor 时摄像机的视场&#xff08;View&#xff09;。如果用户在某一个位置新创建了一个 ARAnchor&#xff0c;这时…...

云原生精品资料合集(附下载)

云计算是产业数字化转型的关键基础设施,以基础设施资源为中心的云搬迁时代接近尾声&#xff0c;以应用价值为中心的云原生时代已经到&#xff0c;所以IT人员学习云原生正当时&#xff01;最近跟各位大神征集了云原生的教程&#xff0c;行业报告和最佳实践&#xff0c;总有一款适…...

JVM 第一部分 JVM两种解释器 类加载过程和类加载器

JVM是跨平台跨语言的虚拟机&#xff0c;不直接接触硬件&#xff0c;位于操作系统的上一层 跟字节码文件直接关联&#xff0c;和语言没有关系 一次编译成字节码文件&#xff0c;多次执行 虚拟机可以分成三部分&#xff1a;类加载器&#xff0c;运行时数据区&#xff0c;执行引…...

用Java语言创建的Spring Boot项目中,如何传递数组呢??

问题&#xff1a; 用Java语言创建的Spring Boot项目中&#xff0c;如何传递数组呢&#xff1f;&#xff1f; 在这个思路中&#xff0c;其实&#xff0c;Java作为一个后端开发的语言&#xff0c;没必要着重于如何传入&#xff0c;我们主要做的便是对传入的数组数据进行处理即可…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...