【香橙派zero3蓝牙串口wifi配网教程】

news2024/9/22 15:41:47

【香橙派zero3蓝牙串口wifi配网教程】

  • 1. 简介
  • 2. 准备工作
    • 2.1 zero3串口5开启
    • 2.2 硬件连接
  • 3. 配网步骤
    • 3.1 连接串口
    • 3.2 打开串口终端
    • 3.3 运行配网脚本
    • 3.4 输入WiFi信息
  • 4. 注意事项
  • 5. 总结

1. 简介

香橙派Zero3是一款基于H618处理器的单板计算机,具有丰富的接口和强大的性能。本教程将指导您如何通过蓝牙串口实现WiFi配网。
在这里插入图片描述

香橙派是一款开源的单板卡片电脑,新一代的arm64开发板,它可以运行AndroidTV 12、Ubuntu 和 Debian等操作系统。香橙派开发板(Orange Pi Zero 3)使用全志H618 系统级芯片,同时拥有 1GB 或 1.5GB 或 2GB 或4GB LPDDR4 内存。

2. 准备工作

  • 确保香橙派Zero3已经安装了Linux 桌面版或服务器系统。
  • 准备一块支持蓝牙5.0模块,用于连接香橙派Zero3串口5和电脑。

2.1 zero3串口5开启

在这里插入图片描述

  1. 下载 wiringOP 的代码
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt install -y git
orangepi@orangepi:~$ git clone https://github.com/orangepi-xunlong/wiringOP.git -b next
  1. 编译安装 wiringOP
orangepi@orangepi:~$ cd wiringOP
orangepi@orangepi:~/wiringOP$ sudo ./build clean
orangepi@orangepi:~/wiringOP$ sudo ./build
  1. 由 26pin 接口的原理图可知,可用的 uart 为 uart5
    在这里插入图片描述

  2. Linux 系统中 uart5 默认是关闭的,需要手动打开才能使用。打开步骤如下所示:

a. 首先运行下 orangepi-config,普通用户记得加 sudo 权限

orangepi@orangepi:~$ sudo orangepi-config

b. 然后选择 System
在这里插入图片描述
c. 然后选择 Hardware
在这里插入图片描述

d. 然后使用键盘的方向键定位到下图所示的位置,再使用空格选中 ph-uart5
在这里插入图片描述

e. 然后选择保存
在这里插入图片描述

f. 然后选择
在这里插入图片描述

g. 然后选择重启系统使配置生效
在这里插入图片描述

  1. 进入 linux 系统后,先确认下/dev 下是否存在 uart5 的设备节点
    注意,linux5.4 系统为/dev/ttyAS5。
orangepi@orangepi:~$ ls /dev/ttyS5
/dev/ttyS5
  1. 然后开始测试 uart5 接口,先使用杜邦线短接要测试的 uart5 接口的 rx 和 tx
uart5
tx 引脚对应 26pin 的 8 号引脚
rx 引脚对应 26pin 的 10 号引脚
  1. 使用 wiringOP 中的 gpio 命令测试串口的回环功能如下所示,如果能看到下面的
    打印,说明串口通信正常
orangepi@orangepi:~$ gpio serial /dev/ttyS5 # linux-6.1 测试命令
Out: 0: -> 0
Out: 1: -> 1
Out: 2: -> 2
Out: 3: -> 3^C

2.2 硬件连接

香橙派Zero3串口5的RXTX分别接蓝牙TXRX,然后正常供电3.3v和GND
在这里插入图片描述
蓝牙可以用5.0或者esp32c3模块
esp32c3main.c程序

#include <WiFi.h>
#include <WebServer.h>
#include <SoftwareSerial.h>
// #include "HardwareSerial.h"
#include <WiFi.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
// char BLEbuf[40] = { 0 };
// uint32_t cnt = 0;
String message_c;
#define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"  // UART service UUID
SoftwareSerial myPort(0, 1);                                 //,与短信模块通信
class MyServerCallbacks : public BLEServerCallbacks {
  void onConnect(BLEServer *pServer) {
    deviceConnected = true;
  };

  void onDisconnect(BLEServer *pServer) {
    deviceConnected = false;
  }
};

class MyCallbacks : public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic *pCharacteristic) {
    String ssid;
    String password;
    const char *message;
    uint8_t count = 0;
    char ssidBuf[20];
    char passwordBuf[20];
    std::string rxValue = pCharacteristic->getValue();
    if (rxValue.length() > 0) {
      // Serial.println(String(rxValue));
      message = rxValue.c_str();
      if (sscanf(message, "%19[^:]:%19s", ssidBuf, passwordBuf) == 2) {
        // Convert C strings to String objects
        ssid = String(ssidBuf);
        password = String(passwordBuf);
      } else {
        Serial.println("Failed to parse SSID and password");
      }
      WiFi.begin(ssid.c_str(), password.c_str());
      while (WiFi.status() != WL_CONNECTED) {
        count++;
        // Serial.println("Connecting WiFi");
        pCharacteristic->setValue("Connecting");
        pCharacteristic->notify();  // Send the value to the app!
        if (count >= 20) {
          Serial.println("connect fail!");
          pCharacteristic->setValue("connect fail");
          pCharacteristic->notify();  // Send the value to the app!
          ESP.restart();              // 执行软件重启
        }
        delay(200);
      }
      pCharacteristic->setValue(" success");
      pCharacteristic->notify();  // Send the value to the app!
      // Serial.println("Connected");
      // Print the values
      myPort.write(message);
      myPort.write('\n');
      Serial.println(message);
    }
  }
};

void smartConfig() {
  // Create the BLE Device
  BLEDevice::init("ESP32 BLE");
  // 创建蓝牙服务器
  BLEServer *pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  // // 创建广播服务的UUID
  BLEService *pService = pServer->createService(SERVICE_UUID);
  // 创建广播服务的UUID
  pCharacteristic = pService->createCharacteristic(SERVICE_UUID, BLECharacteristic::PROPERTY_NOTIFY);
  pCharacteristic->addDescriptor(new BLE2902());
  BLECharacteristic *pCharacteristic = pService->createCharacteristic(SERVICE_UUID, BLECharacteristic::PROPERTY_WRITE);
  pCharacteristic->setCallbacks(new MyCallbacks());
  // 开始蓝牙服务
  pService->start();
  // 开始广播
  pServer->getAdvertising()->start();
  Serial.println("Waiting");
}
void setup() {
  Serial.begin(115200);
  myPort.begin(115200);
  myPort.println("ok");
  // if (!AutoConfig()) {
  smartConfig();
  // }
}

void loop() {
  // WiFiClient client;
  // const char* host = "www.baidu.com";
  // const int httpPort = 80;

  // Serial.print("Connecting to ");
  // Serial.println(host);

  // if (!client.connect(host, httpPort)) {
  //   Serial.println("Connection failed");
  //   return;
  // }

  // Serial.println("Connected to server successfully");
  // client.stop();
  delay(5000);
}

3. 配网步骤

3.1 连接串口

使用USB转串口线将香橙派Zero3的串口与电脑连接。

3.2 打开串口终端

在电脑上打开串口终端软件,如PuTTY或Tera Term,设置正确的串口参数(波特率115200,数据位8,停止位1,无校验位)。

3.3 运行配网脚本

在香橙派Zero3上运行以下Python脚本,实现WiFi配网:
bluetooth.py

import serial
import subprocess
import time

# UART5配置
uart_port = '/dev/ttyS5'
baud_rate = 115200
ser = serial.Serial(uart_port, baud_rate)

while True:
     print(f"Smartconfig")
     with serial.Serial(uart_port, baud_rate) as ser:
         ser.write(b'Hello, world!\n')
         try:
             # 从UART5接收Wi-Fi信息
             wifi_info = ser.readline().decode('utf-8').strip()
             print(f"Received Wi-Fi info from UART5: {wifi_info}")
    
             # 解析Wi-Fi名称和密码
             wifi_parts = wifi_info.split(':')
             if len(wifi_parts) != 2:
                 print("Invalid Wi-Fi info format. Expected 'Wi-Fi_name:Wi-Fi_password'.")
                 continue
    
             wifi_name, wifi_password = wifi_parts
             orangepi_password = "orangepi"
    
             # 验证密码有效性(此处仅为示例,实际验证逻辑请根据需求定制)
             if len(wifi_password) < 8:
                 print("Invalid Wi-Fi password. Minimum length is 8 characters.")
                 continue
    
             # 扫描Wi-Fi网络
             print("Scanning Wi-Fi networks...")
             scan_process = subprocess.Popen(['nmcli', 'dev', 'wifi'], stdout=subprocess.PIPE )
             time.sleep(5)   # 等待一段时间,以便接收扫描结果(可根据实际响应时间调整)
             scan_process.send_signal(subprocess.signal.SIGINT )   # 发送Ctrl+C终止扫描
             scan_output, _ = scan_process.communicate()
             print("Scan completed.")
    
             # 连接Wi-Fi
             print(f"Connecting to Wi-Fi {wifi_name}...")
             expect_script = f"""
                 spawn sudo nmcli dev wifi connect "{wifi_name}" password "{wifi_password}"
                 expect "*?assword*"
                 send "{orangepi_password}\r"
                 interact
             """
             with open('/tmp/connect_wifi.exp', 'w') as f:
                 f.write(expect_script)
             subprocess.run(['/usr/bin/expect', '/tmp/connect_wifi.exp'])
    
             # 检查当前Wi-Fi连接状态
             status_command = 'nmcli dev status'
             status_process = subprocess.run(status_command, shell=True, capture_output=True, text=True)
             if wifi_name in status_process.stdout:
                 print(f"Currently connected to Wi-Fi {wifi_name}.")
             else:
                 print("Not currently connected to Wi-Fi.")
    
             ser.write(b'ok\n')
             break   # 如果成功连接Wi-Fi,跳出循环
    
         except Exception as e:
             print(f"An error occurred: {str(e)}")
    
         finally:
             ser.close()

然后添加bluetooth.py脚本权限,python3运行脚本,就可以开始配网

sudo chmod +x bluetooth.py
python3 bluetooth.py

3.4 输入WiFi信息

连接你的蓝牙设备ESP32 ble,然后安装蓝牙调试助手。在中输入WiFi名称和密码,格式为“Wi-Fi名称:Wi-Fi密码”(iQ00:12345678),然后按回车键。
如果输入的WiFi信息正确,香橙派Zero3将自动连接到WiFi网络。连接成功后,串口终端会显示“Currently connected to Wi-Fi Wi-Fi名称”。
在这里插入图片描述

4. 注意事项

  • 请确保输入的WiFi密码长度至少为8个字符。
  • 如果配网失败,请检查WiFi名称和密码是否正确,以及WiFi网络是否可用。
  • 本配网python脚本没有设置自启动,大家可以自己设置自启动就可以愉快配网啦。

5. 总结

🥳🥳🥳现在,通过以上步骤,您已经成功地为香橙派Zero3配置了WiFi网络。现在,您可以开始探索香橙派Zero3的无限可能了!🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣

如果你有任何问题,可以通过下面的二维码加入鹏鹏小分队,期待与你思维的碰撞😘😘😘

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

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

相关文章

Itasca pfc3d/3dec/flac3d/massflow 9.0 授权

所有 Itasca 软件都建立在每个程序基础的共同元素层之上——无论程序使用何种数值方法或元素。因此&#xff0c;无论是使用 DEM 软件&#xff08;如 3DEC 或 PFC&#xff09;&#xff0c;还是使用 FLAC3D 等连续体软件&#xff0c;都会有许多流程、实用程序和功能是所有这些软件…

C++奇迹之旅:隐含的this指针

文章目录 &#x1f4dd;this指针&#x1f320; this指针的引出&#x1f309; this指针的特性&#x1f309;this指针存在哪里 &#x1f320;思考&#x1f320;C语言和C实现Stack的对比&#x1f309; C语言实现&#x1f309; C实现 &#x1f6a9;总结 &#x1f4dd;this指针 在C…

Redis入门到通关之Set实现点赞功能

文章目录 set 数据类型介绍不排序实现排序实现 set 数据类型介绍 Redis中的set类型是一组无序的字符串值。 set通过其独特的数据结构和丰富的命令提供了在存储和处理集合元素方面的一些非常有用的功能。下面列出了主要的set类型命令&#xff1a; SADD key member1 [member2]&a…

第十五届蓝桥杯 javaB组第三题

测试通过了90% 剩下10%不知道哪错了 思路&#xff1a;我想的是用map&#xff0c;k存第几个队列&#xff0c;value存每个子队列的长度&#xff0c;最后给value排序 第一个就最小的也就是是有效元素数量 考试只对了个案例&#xff0c;其它情况没测试。 复盘 回来后经过修改改…

openwrt局域网配置多个IP

在局域网配置过程中&#xff0c;若是DHCP服务器关闭&#xff0c;又忘记了配置的ip&#xff0c;将很难访问到路由器重新进行配置。这种情况可以在路由器出厂时做一个备用ip去避免。 1.配置 以下是备用ip的配置方法&#xff0c;以SKYLAB的SKW99 WIFI模组为例进行说明&#xff1…

如何应对MySQL单表数据量过大:垂直分表与水平分表策略解析

话接上回&#xff0c;单表最大数据建议两千万&#xff0c;那如果开发一个项目&#xff0c;预计注册量达到一个亿怎么办。 单表内放这么多数据&#xff0c;MYSQL底层B树的层级结构就可能会变得很高&#xff0c;磁盘io次数变多&#xff0c;性能会大幅度降低。所以考虑数据库分表…

设计模式-模板方法模式(TemplateMethod)

1. 概念 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义算法的骨架&#xff0c;将一些步骤延迟到子类中实现。 2. 原理结构图 2.1 图 2.2 角色 抽象类&#xff08;Abstract Class&#xff09; 定义抽象的基本操作&#xff08;Primitive Operations&#xff…

Java+saas模式 智慧校园系统源码MySQL5.7+ elmentui前后端分离架构 让校园管理更高效的数字化平台系统源码

Javasaas模式 智慧校园系统源码MySQL5.7 elmentui前后端分离架构 让校园管理更高效的数字化平台系统源码 智慧校园是在数字通增强版基础上&#xff0c;研发的一套面向教育行业的数字化校园软件&#xff0c;其显著特点是集学校网站、协同办公、即时通讯、网络空间、移动办公于一…

接口自动化测试之调用excel实现接口数据依赖

背景 我们把接口的信息按照规定的格式都维护在excel文件中&#xff0c;通过代码实现调用excel&#xff0c;完成接口的自动化测试。这样&#xff0c;只需要负责人将主要逻辑写好之后&#xff0c;公司其他不会写代码的员工&#xff0c;也可以通过维护excel中的接口数据&#xff…

C语言 递归

递归指的是在函数的定义中使用函数自身的方法。 举个例子&#xff1a; 从前有座山&#xff0c;山里有座庙&#xff0c;庙里有个老和尚&#xff0c;正在给小和尚讲故事呢&#xff01;故事是什么呢&#xff1f;“从前有座山&#xff0c;山里有座庙&#xff0c;庙里有个老和尚&…

【算法练习】29:插入排序学习笔记

一、插入排序的算法思想 原理&#xff1a;将一个无序的数据序列逐步转化为有序序列。算法将待排序的数组分为两个部分已排序部分和未排序部分。 时间复杂度&#xff1a;插入排序的时间复杂度在最坏、平均和最好情况下的表现相同&#xff0c;均为 &#xff0c;其中 n 是待排序数…

OpenHarmony轻量系统开发【10】编写自己的软件包

10.1 添加第一个a_myparty软件包 打开鸿蒙系统的源码&#xff0c;可以看到有这么一个文件夹&#xff1a;third_party。里面存放的是第三方的代码。 点开我们可以看到有很多第三方代码&#xff1a; 后续我们如果需要往系统中添加、移植任何开源代码&#xff0c;都可以添加到这个…

ChatGPT们写高考作文会发生什么?

2023年的高考结束了&#xff0c;今年共有1291万考生参加了高考了&#xff0c;再次创造了历史参考人数之最。在高考中&#xff0c;要说什么最引人讨论&#xff0c;那高考作文当仁不让啊。今年随着ChatGPT的爆火&#xff0c;可谓是给文字工作者带来一大助力&#xff0c;如果让AI来…

做测试,不会接口测试怎么能行?

接口测试的测试点 功能测试&#xff1a;单接口功能、业务场景功能 性能测试&#xff1a;响应时长、错误率、吞吐量、服务器资源使用率 安全测试&#xff1a;敏感数据是否加密、SQL注入、其他 本篇文章以接口功能测试为主。 接口用例设计方法&#xff1a; 单接口测试用例设…

在网上打印资料多少钱一张

随着互联网的普及和线上服务的完善&#xff0c;越来越多的人选择在网上打印资料。这种方式不仅方便快捷&#xff0c;而且通常价格更为透明和实惠。那么&#xff0c;在网上打印资料到底多少钱一张呢&#xff1f;这主要取决于您选择的打印平台、纸张规格、打印质量以及打印数量等…

SpringBoot的旅游管理系统+论文+ppt+免费远程调试

项目介绍: 基于SpringBoot旅游网站 旅游管理系统 本旅游管理系统采用的数据库是Mysql&#xff0c;使用SpringBoot框架开发。在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 &#xff08;1&…

ModuleNotFoundError: No module named ‘llama_index.readers“解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Day55 动态规划 part15

Day55 动态规划 part15 392.判断子序列 我的思路&#xff1a; 自己还是只能想到双指针法 解答: class Solution {public boolean isSubsequence(String s, String t) {if(s.length() 0) {return true;}if(s.length() > t.length() || t.length() 0) {return false;}ch…

牛客小白月赛90(A,B,C,D,E,F)

比赛链接 官方题解&#xff08;视频&#xff09; 这场偏思维&#xff0c;感觉好像没啥算法。E需要动态维护前 k k k 小&#xff0c;F是个离散化加dp&#xff0c;状态和递推方程比较 非常规&#xff0c;建议还是看一下涨涨姿势。 A 小A的文化节 思路&#xff1a; 签到 cod…

都2024年了,还不知道怎么学习网络安全?来看看吧,很难找全的

前言 最近收到不少关注朋友的私信和留言&#xff0c;大多数都是零基础小友入门网络安全&#xff0c;需要相关资源学习。其实看过的铁粉都知道&#xff0c;之前的文里是有过推荐过的。新来的小友可能不太清楚&#xff0c;这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…