【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 socket

sock = 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:
        break
    print("Received data:", data.decode())

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言程序设计十大排序—冒泡排序

文章目录 1.概念✅2.冒泡排序&#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一&#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法&#xff0c;排序后的数据更易于处理和查找。在计算机发展…

【Elasticsearch】腾讯云安装Elasticsearch

Elasticsearch 认识Elasticsearch安装Elasticsearch安装Kibana安装IK分词器分词器的作用是什么&#xff1f;IK分词器有几种模式&#xff1f;IK分词器如何拓展词条&#xff1f;如何停用词条&#xff1f; 认识Elasticsearch Elasticsearch的官方网站如下 Elasticsearch官网 Ela…

Django学习笔记(安装和环境配置)-01

Django学习笔记(安装和环境配置)-01 一、创建python环境 1、可以通过安装Anaconda来创建一个python环境 # 创建一个虚拟python环境 conda create -n django python3.8 # 切换激活到创建的环境中 activate django2、安装django # 进入虚拟环境中安装django框架 pip install …

python创建一个httpServer网页上传文件到httpServer

一、代码 1.server.py import os from http.server import SimpleHTTPRequestHandler, HTTPServer import cgi # 自定义请求处理类 class MyRequestHandler(SimpleHTTPRequestHandler):# 处理GET请求def do_GET(self):if self.path /:# 响应200状态码self.send_response(2…

一个软件分发和下载的网站源码,带多套模板

PHP游戏应用市场APP软件下载平台网站源码手机版 可自行打包APP&#xff0c;带下载统计&#xff0c;带多套模板&#xff0c;带图文教程 代码下载&#xff1a;百度网盘

前端面试题-问答篇-5万字!

1. 请描述CSS中的层叠&#xff08;Cascade&#xff09;和继承&#xff08;Inheritance&#xff09;规则&#xff0c;以及它们在实际开发中的应用。 在CSS中&#xff0c;层叠&#xff08;Cascade&#xff09;和继承&#xff08;Inheritance&#xff09;是两个关键的规则&#x…

面试:Hadoop,块,HDFS的优缺点,HDFS的读写流程

Hadoop CDH会简化Hadoop的安装 Hue主要用于数据分析和处理&#xff0c;而CM(Cloudera Manager)则主要用于集群的管理和运维。 HDFS HDFS的块 块是 HDFS 系统当中的最小存储单位, 在hadoop2.0和3.0中默认128MB 在HDFS上的文件会被拆分成多个块&#xff0c;每个块作为独立的单…

Stable Diffusion 3.5 模型在 Linux 上的部署指南

文章目录 前言-参考资料如下一. ComfyUI安装二.模型下载2.1 安装GGUF和T5 xxl编码模型2.2 安装ComfyUI辅助插件2.3 启动ComfyUI2.4 基础ComfyUI和SD3.5配置2.5 demo 前言-参考资料如下 ComfyUI WIKI教程 sd3.5 github 尝试过sd集成ollama&#xff0c;但是sd在ollama上无法良好…

移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式宣布&#xff0c;其支持“卫星蜂窝”多模式的高集成度NTN卫星通信模组BG95-S5已成功获得NTN网络运营商Skylo的网络认证。BG95-S5也成为了获得该认证的最新款移远卫星通信模组。 BG95-S5模组顺利获得Skylo认证&a…

C语言之饭店外卖信息管理系统

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之饭店外卖信息管理系统 目录 设计题目设计目的设计任务描述设计要求输入和输出要求验…

【数学建模美赛速成系列】O奖论文绘图复现代码

文章目录 引言折线图 带误差棒得折线图单个带误差棒得折线图立体饼图完整复现代码 引言 美赛的绘图是非常重要得&#xff0c;这篇文章给大家分享我自己复现2024年美赛O奖优秀论文得代码&#xff0c;基于Matalab来实现&#xff0c;可以直接运行出图。 折线图 % MATLAB 官方整理…

wordpress安装完后台无格式解决方法(样式加载不出来)

刚安装的wordpress,进入后台后,没有样式。 1.如果ip进入,可能一切正常 2.域名进入,遇到这种情况概率大(经过了nginx代理) 正常访问文章的话是没问题的,只是管理后台存在这样的代码,样式没加载出来。 美国随机地址生成器:美国随机地址生成器(随机地址生成器 - 生成全…

R语言基础| 回归分析

写在前面 R语言拥有丰富的数据处理、统计分析和机器学习工具包&#xff0c;涵盖了从简单的描述统计到复杂的模型建立的各个方面。再加上数据的处理可以完美的衔接后续的可视化&#xff0c;这使得它成为处理各种类型和规模的数据集的理想选择。回归分析是统计学中一种用于探究自…

数据结构-ArrayList和顺序表

1.线性表 线性表是n个具有相同类型的数据元素所组成的有限序列&#xff0c;当n0时&#xff0c;线性表为一个空表。 常见的线性表&#xff1a;顺序表&#xff0c;链表&#xff0c;栈和队列... 线性表在逻辑上是线性结构&#xff0c;可以说是连续的一条直线。但是在物理结构上…

计算机视觉算法实战——人类情感识别(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​​​​​​​​​​​​​​​​ 1. 引言✨✨ 人类情感识别&#xff08;Facial Expression Recognition, FER&#xff09;是计算机视觉领…

08_游戏启动逻辑

1.GameRoot.cs 控制 服务层Svc.cs 和业务层Sys.cs 的初始化 创建脚本GameRoot.cs&#xff08;游戏入口 已进入就初始化各个系统&#xff09; 创建资源加载服务.cs Res 将服务层Svc设置成单例类所以需要挂载在GameRoot身上&#xff0c;这样就可以通过GameRoot来调各个服务 接…

当使用 npm 时,出现 `certificate has expired` 错误通常意味着请求的证书已过期。

当使用 npm 时&#xff0c;出现 certificate has expired 错误通常意味着请求的证书已过期。这可能是由于以下几种情况&#xff1a; 网络代理问题&#xff1a;如果使用了网络代理&#xff0c;代理服务器的证书可能过期或配置有误。系统时间错误&#xff1a;系统时间不准确可能导…

2024年,我的技术探索与成长之路

2024年&#xff0c;我的技术探索与成长之路 2024年已经过去&#xff0c;作为一名技术爱好者和写作者&#xff0c;我回顾了过去一年在博客上记录的点滴&#xff0c;感慨良多。这一年&#xff0c;我不仅见证了技术的飞速发展&#xff0c;也在不断学习和实践中找到了自己的成长方向…

ASP.NET Blazor部署方式有哪些?

今天我们来说说Blazor的三种部署方式&#xff0c;如果大家还不了解Blazor&#xff0c;那么我先简单介绍下Blazor Blazor 是一种 .NET 前端 Web 框架&#xff0c;在单个编程模型中同时支持服务器端呈现和客户端交互性&#xff1a; ● 使用 C# 创建丰富的交互式 UI。 ● 共享使用…

【LeetCode】--- MySQL刷题集合

1.组合两个表&#xff08;外连接&#xff09; select p.firstName,p.lastName,a.city,a.state from Person p left join Address a on p.personId a.personId; 以左边表为基准&#xff0c;去连接右边的表。取两表的交集和左表的全集 2.第二高的薪水 &#xff08;子查询、if…