【ESP32】ESP32连接JY61P并通过WIFI发送给电脑

前言

手头上有个ESP32,发现有wifi功能,希望连接JY61P并通过WIFI把姿态数据发送给电脑
1.采用Arduino IDE编译器;需要安装ESP32的开发板管理器;
2.电脑接受数据是基于python的;

1. ESP32 连接手机WIFI

#include <WiFi.h>  // 引入 WiFi 库// 替换为你的 Wi-Fi 网络名称和密码
const char* ssid = "wifi名称";
const char* password = "wifi密码";void setup() {Serial.begin(115200);  // 初始化串口通信delay(1000);  // 等待 1 秒// 连接到 Wi-Fi 网络Serial.println("Connecting to WiFi...");WiFi.begin(ssid, password);// 等待连接成功while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}// 连接成功后打印 IP 地址Serial.println("\nConnected to WiFi!");Serial.print("IP Address: ");Serial.println(WiFi.localIP());
}void loop() {// 在这里可以添加更多功能delay(1000);
}

可以用上面这段代码,测试WIFI功能,打开串口助手,我这里使用的是XCOM,如果成功,会显示如下数据,提醒:不要勾选16进制显示。
在这里插入图片描述

2.ESP32连接IMU(JY61P)

(1).硬件连接
ESP32 与 JY61P 的连接:
JY61P 的 VCC 连接到 ESP32 的 3.3V。
JY61P 的 GND 连接到 ESP32 的 GND。
JY61P 的 TX 连接到 ESP32 的 GPIO 16(Serial2 的 RX 引脚)。
JY61P 的 RX 连接到 ESP32 的 GPIO 17(Serial2 的 TX 引脚)。
在这里插入图片描述

#include <WiFi.h>
#include <WiFiClient.h>// Wi-Fi 网络信息
const char* ssid = "wifi名称";
const char* password = "wifi密码"; // 替换为你的 Wi-Fi 密码// TCP 服务器信息
const char* serverIP = "XXXXX"; // 替换为电脑的 IP 地址
const uint16_t port = 8080;             // 电脑端的 TCP 服务器端口// 初始化 TCP 客户端
WiFiClient client;// JY61P 串口通信
#define JY61_BAUDRATE 9600  // JY61P 默认波特率void setup() {// 初始化串口Serial.begin(115200);  // 用于调试Serial2.begin(JY61_BAUDRATE, SERIAL_8N1, 16, 17);  // 使用 Serial2,连接到 GPIO 16 (RX) 和 GPIO 17 (TX)// 连接到 Wi-Fi 网络WiFi.begin(ssid, password);Serial.println("Connecting to WiFi...");while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("\nConnected to WiFi!");Serial.print("IP Address: ");Serial.println(WiFi.localIP());// 连接到电脑的 TCP 服务器Serial.print("Connecting to server at ");Serial.print(serverIP);Serial.print(":");Serial.println(port);if (!client.connect(serverIP, port)) {Serial.println("Connection failed");while (1);  // 如果连接失败,进入死循环}Serial.println("Connected to server");
}void loop() {// 检查 JY61P 是否有数据if (Serial2.available() >= 10) {  // JY61P 每次发送 10 字节数据uint8_t data[10];for (int i = 0; i < 10; i++) {data[i] = Serial2.read();  // 读取数据}// 解析数据(以角度为例)int16_t roll = (data[0] << 8) | data[1];  // 横滚角int16_t pitch = (data[2] << 8) | data[3]; // 俯仰角int16_t yaw = (data[4] << 8) | data[5];   // 航向角// 将数据格式化为字符串String message = "Roll: " + String(roll) + ", Pitch: " + String(pitch) + ", Yaw: " + String(yaw);// 打印数据到串口监视器(调试用)Serial.println(message);// 将数据发送到电脑的 TCP 服务器if (client.connected()) {client.println(message);} else {Serial.println("Connection lost. Reconnecting...");if (client.connect(serverIP, port)) {Serial.println("Reconnected to server");} else {Serial.println("Reconnection failed");}}}
}

上述代码中的IP地址可以百度自行查询自己的IP地址。

3.电脑端监听

import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("0.0.0.0", 8080))  # 监听端口 8080
sock.listen(1)
print("Server started, waiting for connection...")client, addr = sock.accept()
print(f"Connected by {addr}")while True:data = client.recv(1024)if not data:breakprint("Received data:", data.decode())

如果运行正常:窗口会打印出如下数据
在这里插入图片描述

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

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

相关文章

如何在data.table中处理缺失值

&#x1f4ca;&#x1f4bb;【R语言进阶】轻松搞定缺失值&#xff0c;让数据清洗更高效&#xff01; &#x1f44b; 大家好呀&#xff01;今天我要和大家分享一个超实用的R语言技巧——如何在data.table中处理缺失值&#xff0c;并且提供了一个自定义函数calculate_missing_va…

NodeJs如何做API接口单元测试? --【elpis全栈项目】

NodeJs API接口单元测试 api单元测试需要用到的 assert&#xff1a;断言库 (还要一些断言库比如:Chai)supertest&#xff1a; 模拟http请求 简单的例子&#xff1a; const express require(express); const supertest require(supertest); const assert require(assert);…

计算机视觉算法实战——无人机检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​ 1. 引言✨✨ 随着无人机技术的快速发展&#xff0c;无人机在农业、物流、监控等领域的应用越来越广泛。然而&#xff0c;无人机的滥用也带…

Node.js HTTP模块详解:创建服务器、响应请求与客户端请求

Node.js HTTP模块详解&#xff1a;创建服务器、响应请求与客户端请求 Node.js 的 http 模块是 Node.js 核心模块之一&#xff0c;它允许你创建 HTTP 服务器和客户端。以下是一些关键知识点和代码示例&#xff1a; 1. 创建 HTTP 服务器 使用 http.createServer() 方法可以创建…

华为支付接入规范

为了确保用户获得良好的支付体验&#xff0c;Payment Kit制定了相关接入设计规范&#xff0c;请开发者遵照执行&#xff0c;具体要求&#xff08;非强制性&#xff09;如下&#xff1a; 一、支付方式呈现 涉及支付公司名称&#xff0c;请统一使用&#xff1a;花瓣支付&#xff…

C语言-----扫雷游戏

扫雷游戏的功能说明 &#xff1a; • 使⽤控制台实现经典的扫雷游戏 • 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷的棋盘是9*9的格⼦ • 默认随机布置10个雷 • 可以排查雷&#xff1a; ◦ 如果位置不是雷&#xff0c;就显⽰周围有⼏个雷 ◦ 如果位置是雷&#xff0c;就…

Python人脸识别库DeepFace使用教程及源码解析

目录 一、DeepFace介绍 1、人脸库设计 2、DeepFace.find 3、DeepFace.verify 4、DeepFace.analyze 5、DeepFace.extract_faces 6、DeepFace.represent 7、DeepFace.stream 二、DeepFace二次开发 1、开发活体检测API 2、模型权重持久化 三、总结 一、DeepFace介绍 …

Java多线程的面试面试题及答案解析

什么是进程&#xff1f;什么是线程&#xff1f;有什么区别&#xff1f; 进程是系统资源分配的基本单位&#xff0c;拥有独立的地址空间。线程是 CPU 调度和分派的基本单位&#xff0c;是比进程更小的独立执行的单位&#xff0c;共享所在进程的内存空间等资源。一个进程可以包含…

三分钟简单了解一些HTML的标签和语法_02

1.a标签演示 点击然后跳转 代码加入title 2.图片链接 3.锚点链接 点击就会跳转的当前位置 4.a标签小知识补充 该实例会跳转到顶,锚点链接则会跳转到相应的锚点 5. 结果:直接跳转到该页面的锚点处 6. 在 HTML 中&#xff0c;<tr>标签表示表格中的行&#xff08;TableRow&…

多选multiple下拉框el-select回显问题(只显示后端返回id)

首先保证v-model的值对应options数据源里面的id <el-form-item prop"subclass" label"分类" ><el-select v-model"formData.subclass" multiple placeholder"请选择" clearable :disabled"!!formData.id"><e…

2025年数学建模美赛:A题分析(1)Testing Time: The Constant Wear On Stairs

2025年数学建模美赛 A题分析&#xff08;1&#xff09;Testing Time: The Constant Wear On Stairs 2025年数学建模美赛 A题分析&#xff08;2&#xff09;楼梯磨损分析模型 2025年数学建模美赛 A题分析&#xff08;3&#xff09;楼梯使用方向偏好模型 2025年数学建模美赛 A题分…

Qt——引用第三方SDK lib库的使用方法

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》 《实用硬件方案设计》 《结构建模设…

Java 反射与动态代理:实践中的应用与陷阱

Java 反射与动态代理&#xff1a;实践中的应用与陷阱 在现代Java应用中&#xff0c;反射和动态代理提供了强大的灵活性&#xff0c;但它们也带来了性能和复杂度上的挑战。本文将深入探讨这些技术在实际项目中的应用&#xff0c;分析它们可能导致的陷阱&#xff0c;并提供详细的…

Linux(Centos 7.6)命令详解:wc

1.命令作用 打印文件的行数、单词数、字节数&#xff0c;如果指定了多个文件&#xff0c;还会打印以上三种数据的总和(Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified) 2.命令语法 Usage: wc [OPTION]... [FIL…

skynet 源码阅读 -- 核心概念服务 skynet_context

本文从 Skynet 源码层面深入解读 服务&#xff08;Service&#xff09; 的创建流程。从最基础的概念出发&#xff0c;逐步深入 skynet_context_new 函数、相关数据结构&#xff08;skynet_context, skynet_module, message_queue 等&#xff09;&#xff0c;并通过流程图、结构…

超分辨率体积重建实现术前前列腺MRI和大病理切片组织病理学图像的3D配准

摘要: 磁共振成像(MRI)在前列腺癌诊断和治疗中的应用正在迅速增加。然而,在MRI上识别癌症的存在和范围仍然具有挑战性,导致即使是专家放射科医生在检测结果上也存在高度变异性。提高MRI上的癌症检测能力对于减少这种变异性并最大化MRI的临床效用至关重要。迄今为止,这种改…

TypeScript 基础使用和相关问题

tsconfig.json 配置文件 {"compilerOptions": {"target": "esnext","jsx": "preserve","jsxImportSource": "vue","lib": ["esnext", "dom"],"useDefineForClassF…

leetcode-分割等和子集

本题涉及到的是01背包问题&#xff0c;我将从两种解决背包问题的思路写出题解 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#…

企业级流程架构设计思路-基于价值链的流程架构

获取更多企业流程资料 纸上得来终觉浅&#xff0c;绝知此事要躬行 一.企业流程分级规则定义 1.流程分类分级的总体原则 2.完整的流程体系需要体现出流程的分类分级 03.通用的流程分级方法 04.流程分级的标准 二.企业流程架构设计原则 1.流程架构设计原则 流程框架是流程体…

利用 SoybeanAdmin 实现前后端分离的企业级管理系统

引言 随着前后端分离架构的普及&#xff0c;越来越多的企业级应用开始采用这种方式来开发。前后端分离不仅提升了开发效率&#xff0c;还让前端和后端开发可以并行进行&#xff0c;减少了相互之间的耦合度。SoybeanAdmin 是一款基于 Spring Boot 和 MyBatis-Plus 的后台管理系…