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

【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())

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


http://www.kler.cn/a/513962.html

相关文章:

  • 路径规划之启发式算法之二十八:候鸟优化算法(Migrating Birds Optimization, MBO)
  • Github 2025-01-20 开源项目周报 Top15
  • 【重庆市乡镇界】面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移内容测评
  • 【深度学习项目】语义分割-FCN网络(原理、网络架构、基于Pytorch实现FCN网络)
  • Linux-C/C++--深入探究文件 I/O (下)(文件共享、原子操作与竞争冒险、系统调用、截断文件)
  • Syncthing在ubuntu下的安装使用
  • 软件测试 —— Postman(全局变量和环境变量,请求前置脚本,关联)
  • android studio 工具.gradle目录修改
  • 【Go语言圣经】第三节:基础数据类型
  • No. 34 笔记 | Python知识架构与数据类型相关内容 | 实操
  • postgresql清理wal日志
  • k8s的CICD实施项目
  • 基于微信小程序的民宿预订管理系统
  • map和set的使用(一)详解
  • K8s UI工具 Kuboard 安装
  • Mysql视图(学习自用)
  • 记一次 .NET某数字化协同管理系统 内存暴涨分析
  • Day 14 卡玛笔记
  • Java设计模式 十一 外观模式 (Facade Pattern)
  • django使用踩坑经历
  • springboot基于前后端分离的摄影知识网站
  • 新书速览|算法竞赛入门笔记
  • 吴恩达深度学习——建立逻辑回归分类器识别猫
  • html简单项目案例
  • 私有IP、VLAN和VPC,分别适合哪些场景你知道吗?
  • R语言的图形用户界面