【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.rhkb.cn/news/5238.html

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

相关文章

第23篇 基于ARM A9处理器用汇编语言实现中断<五>

Q&#xff1a;怎样修改HPS Timer 0定时器产生的中断周期&#xff1f; A&#xff1a;在上一期实验的基础上&#xff0c;可以修改按键中断服务程序&#xff0c;实现红色LED上的计数值递增的速率&#xff0c;主程序和其余代码文件不用修改。 实现以下功能&#xff1a;按下KEY0…

E-Prime2实现List嵌套

用E-Prime实现一个简单的List嵌套&#xff0c;实验流程基于斯特鲁程序&#xff08;色词一致/不一致实验&#xff09;。 首先File-New&#xff0c;新建一个空白项目 此时生成流程如下 Experiment Object是实验中被用到的流程或者控件对象&#xff0c;SessionProc是总流程&#x…

JS宏进阶:正则表达式的使用

正则表达式&#xff0c;对于任何一门编程语言来说&#xff0c;都是一种非常强大的工具&#xff0c;主要用于搜索、编辑或操作文本和数据。因此&#xff0c;在JS中&#xff0c;也存在相应的对象new RegExp( )&#xff0c;在本章中&#xff0c;将详细介绍正则表达式在JS宏中的运用…

在 Kubernetes 上快速安装 KubeSphere v4.1.2

目录标题 安装文档配置repo安装使用插件 安装文档 在 Kubernetes 上快速安装 KubeSphere 配置repo export https_proxy10.10.x.x:7890 helm repo add stable https://charts.helm.sh/stable helm repo update安装 helm upgrade --install -n kubesphere-system --create-name…

细说STM32F407单片机电源低功耗StopMode模式及应用示例

目录 一、停止模式基础知识 1、进入停止模式 2、停止模式的状态 3、退出停止模式 4、SysTick定时器的影响 二、停止模式应用示例 1、示例功能和CubeMX项目配置 &#xff08;1&#xff09;时钟 &#xff08;2&#xff09;RTC &#xff08;3&#xff09;ADC1 &#xf…

JavaScript学习笔记(1)

html 完成了架子&#xff0c; css 做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习 JavaScript&#xff0c;这门语言会让我们的页面能够和用户进行交互。 一、引入方式 1.内部脚本 将 JS 代码定义在 HTML 页面中 Jav…

【三维分割】Gaga:通过3D感知的 Memory Bank 分组任意高斯

文章目录 摘要一、引言二、主要方法2.1 3D-aware Memory Bank2.2 三维分割的渲染与下游应用 三、实验消融实验应用: Scene Manipulation 地址&#xff1a;https://www.gaga.gallery 标题&#xff1a;Gaga: Group Any Gaussians via 3D-aware Memory Bank 来源&#xff1a;加利福…

Day 14 卡玛笔记

这是基于代码随想录的每日打卡 226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;r…

|Python新手小白中级教程|第三十章:日期与时间(入门)

文章目录 前言一、日期与时间的基本概念二、时间戳1.概念2.形成过程 三、Python的时间格式化符号四、时间元组1.时间元组&#xff1a;2.struct_time元组的属性 五、time库可以干什么总结 前言 大家好呀&#xff0c;BOBO仔回来啦。 说实话&#xff0c;这几天我们学习面向对象的…

代码随想录刷题day13|(链表篇)24.两两交换链表中的结点

目录 一、链表理论基础 二、思路及易错点 易错点 三、相关算法题目 四、错误代码分析 一、链表理论基础 代码随想录 (programmercarl.com) 二、思路及易错点 该题使用虚拟头结点正常进行模拟即可&#xff0c;有两个关键点&#xff0c;一是循环何时终止&#xff1f;终止…

PIC单片机设置bootloader程序和app程序地址方法

在调试bootloader和app程序的时候通常都需要设置程序的偏移地址&#xff0c;下面就总结一下使用MPLAB X IDE 设置程序地址的方法。 打开bootloader工程 工程上单击鼠标右键&#xff0c;选择Properties,打工工程属性窗口。 此时会打开项目属性对话框 左边类别选择XC8 Line…

51c大模型~合集105

我自己的原文哦~ https://blog.51cto.com/whaosoft/13101924 #刚刚&#xff0c;ChatGPT开始有了执行力&#xff01; 现在 AI 智能体可以 24*7 小时为你打工。 2025 刚过去了半个月&#xff0c;OpenAI 在智能体领域「开大」了。 今天&#xff0c;OpenAI 正在为 ChatGPT 推出…

迅为龙芯2K1000开发板/核心板流畅运行Busybox、Buildroot、Loognix、QT5.12系统

硬件配置 国产龙芯处理器&#xff0c;双核64位系统&#xff0c;板载2G DDR3内存&#xff0c;流畅运行Busybox、Buildroot、Loognix、QT5.12 系统! 接口全板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、GPS接口WIF1、蓝牙、Mini H…

StarRocks强大的实时数据分析

代码仓库&#xff1a;https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速开始&#xff1a;StarRocks | StarRocks StarRocks 是一款高性能分析型数据仓库&#xff0c;使用向量化、MPP 架构、CBO、智能物化…

web前端1--基础

&#xff08;时隔数月我又来写笔记啦~&#xff09; 1、下载vscode 1、官网下载&#xff1a;Visual Studio Code - Code Editing. Redefined 2、步骤&#xff1a; 1、点击同意 一直下一步 勾一个创建桌面快捷方式 在一直下一步 2、在桌面新建文件夹 拖到vscode图标上 打开v…

基于tldextract提取URL里的子域名、主域名、顶级域

TLD是TopLevel Domain的缩写。‌tldextract‌ 是一个用于从URL中提取子域、主域名和顶级域&#xff08;TLD&#xff09;的Python库。它利用公共后缀列表&#xff08;Public Suffix List&#xff09;来确保即使是复杂或不常见的URL结构也能被正确解析。tldextract能够处理包括IC…

音频入门(一):音频基础知识与分类的基本流程

音频信号和图像信号在做分类时的基本流程类似&#xff0c;区别就在于预处理部分存在不同&#xff1b;本文简单介绍了下音频处理的方法&#xff0c;以及利用深度学习模型分类的基本流程。 目录 一、音频信号简介 1. 什么是音频信号 2. 音频信号长什么样 二、音频的深度学习分…

数据结构之堆排序

文章目录 堆排序版本一图文理解 版本二向下调整建堆向上调整建堆 排升/降序升序 堆排序 版本一 基于已有数组建堆取堆顶元素并删除堆顶元素重新建大根堆&#xff0c;完成排序版本。 图文理解 版本二 前提&#xff1a;必须提供有现成的数据结构堆 数组建堆&#xff0c;首尾…

小菜鸟系统学习Python第三天

1.优先级问题: 结论: 幂运算>正负号>加减乘除和整除>比较运算符>逻辑运算符 2.三元运算符 3.assert断言:抛出AssertionError异常 4.for循环 4. 5.break和continue

常用排序算法之插入排序

目录 前言 一、基本原理 1.算法步骤 2.动画演示 3.插入排序的实现代码 二、插入排序的时间复杂度 1. 时间复杂度 1.最优时间复杂度 2.最差时间复杂度 3.平均时间复杂度 2. 空间复杂度 三、插入排序的优缺点 1.优点 2.缺点 四、插入排序的改进与变种 五、插入排…