gpt4 book ai didi

ios - 使用 Swift IOS 语言通过蓝牙发送信息

转载 作者:行者123 更新时间:2023-12-03 19:48:29 31 4
gpt4 key购买 nike

我实际上在信息学学校,我在用 Swift 编码的自签名应用程序(Xcode 11.3 和 iOS 13.2 设备)与插入 Arduino 的 BLE 模块 SH-HC-08 之间的连接时遇到一些问题。 (UUID:FE60E626-C58C-69F5-324F-43C7C409A93D)

我对 swift 语言完全陌生,并且用这种语言自学这种思维方式。

我正在使用 CoreBluetooth 来检测 iPhone 上的蓝牙是否打开或关闭。我实际上无法检查是否检测到我的外围设备,并且无法通过我的应用程序发送任何信息。(不明白CoreBluetooth中的方法如何配置)

我在应用商店下载了名为 LightBlueBluetoothLE 的应用。第一个为我提供了有关蓝牙设备的一些信息,第二个允许我通过蓝牙模块将 Ascii 字符串发送到我的 Arduino。

浅蓝信息1:

enter image description here

浅蓝信息2:

enter image description here

蓝牙LE应用程序:

enter image description here

正如我之前所说,我已经:

  • 导入 CoreBluetooth

  • 将 CBCentralManagerDelegate 和 CBPeripheralDelegate 添加到我的 ViewController 类

  • 实例化CBCentralManager和CBPeripheral

  • 设置centralManagerDidUpdateState函数

    核心蓝牙代码:

import UIKit
import CoreBluetooth



var texteEnvoyer:String?
var test = false



class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {

var manager:CBCentralManager!
var module : CBPeripheral!

@IBOutlet weak var labelConnection: UILabel!
@IBOutlet weak var switchConnection: UISwitch!
@IBOutlet weak var labelTextField: UITextField!
@IBOutlet weak var labelTest: UILabel!



override func viewDidLoad() {
super.viewDidLoad()

refresh()
manager = CBCentralManager(delegate: self, queue: nil)


}


func centralManagerDidUpdateState(_ central: CBCentralManager)
{
if(central.state == .poweredOff)
{
let alertController = UIAlertController(title: "Bluetooth", message: "Le bluetooth est déconnecté, veuillez l'activer et vous connecter au module.", preferredStyle: UIAlertController.Style.alert)
alertController.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
present(alertController, animated: true, completion: nil)
test = false
}
if(central.state == .poweredOn)
{
test = true
}
refresh()
}

我尝试使用其他方法,例如 didDiscoverPeripheraldidConnected 但我不明白我在做什么,也找不到任何帮助来发送信息(首选在字符串中)由一个自制的蓝牙应用程序实现。

我试图发现我的模块,但我的日志中没有任何“打印”,并且不知道我的请求是否已完成......如果我做得好或不好。

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print("Name: \(peripheral.name)")
self.module = peripheral
self.module.delegate = self

if(peripheral.name == "SG-HC-08"){
manager.stopScan()
manager.connect(self.module, options: nil)
print(peripheral.name)
}
}

有人有这方面的经验或提供任何帮助会对我有很大帮助。谢谢

最佳答案

吉科,

我会谨慎使用全局变量。

您的全局变量是在类范围之外声明的两个变量。

var texteEnvoyer:String? 
var test = false

这些有时会导致程序出现问题,例如内存泄漏和保留。我并不是说你就是这种情况。但如果您继续开发和发布应用程序,这可能需要重新考虑。我确信对于您的目的来说,现在这完全没问题。

对于“控制台中没有任何内容来自外围设备”的观点,我们可以尝试添加一些打印语句来帮助我们调试实际发生的情况。

对于初学者:

func centralManagerDidUpdateState(_ central: CBCentralManager){
//.....
print("ENTERED THE FUNCTION")
if(peripheral.name == "SG-HC-08"){
manager.stopScan()
manager.connect(self.module, options: nil)
print("REACHED HERE")
}
}

如果在控制台中您看到“REACHED HERE”,那么我们就知道代码已被调用并执行。但这并不意味着连接成功。

如果我们没有看到打印语句“ENTERED THE FUNCTION”或“REACHED HERE”,则意味着存在基本错误。该函数从未被调用或执行。

我首先创建一个像这样的函数:

func startScan(){
if let central = manager {
central.scanForPeripheralsWithServices(nil, options: nil)
print("started Scanning")
}
}

然后在viewDidLoad()中调用开始扫描

override func viewDidLoad(){
super.viewDidLoad(animated)
startScan()
}

然后,一旦发现外围设备,请使用 didDiscoverPeripheral 方法(将首先调用)

func centralManager(_ central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: [NSObject : AnyObject]!, RSSI: NSNumber!) {
print("DISCOVERED PERIPHERAL", peripheral)
// manager.connectPeripheral(peripheral, options: nil)
}

一旦发现,您就可以连接到它。

希望这有帮助

编辑----

尝试将这两行添加到您的函数中。

   peripheral.delegate = self
peripheral.discoverServices(nil)

像这样

func centralManager(_ central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: [NSObject : AnyObject]!, RSSI: NSNumber!) {
print("DISCOVERED PERIPHERAL", peripheral)
// manager.connectPeripheral(peripheral, options: nil)
}

我忘记在函数参数中添加下划线“_”

func centralManager(_ central: ....) {}

--------------------^

关于ios - 使用 Swift IOS 语言通过蓝牙发送信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59456657/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com