Skip to content

Instantly share code, notes, and snippets.

@jvcleave
Last active September 6, 2023 01:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jvcleave/ff8093e79c43c3aa3fffad463eb017a6 to your computer and use it in GitHub Desktop.
Save jvcleave/ff8093e79c43c3aa3fffad463eb017a6 to your computer and use it in GitHub Desktop.
BASIC
7E05 0301 06FF FF00 EF
7E05 0300 06FF FF00 EF
7E05 0301 06FF FF00 EF
7E05 0302 06FF FF00 EF
7E05 03D4 06FF FF00 EF
7E05 03C1 06FF FF00 EF
7E05 03C2 06FF FF00 EF
7E05 03C3 06FF FF00 EF
7E05 03C4 06FF FF00 EF
7E05 03C5 06FF FF00 EF
7E05 03C6 06FF FF00 EF
7E05 03C7 06FF FF00 EF
7E05 03C8 06FF FF00 EF
7E05 03C9 06FF FF00 EF
7E05 03CA 06FF FF00 EF
7E05 03CB 06FF FF00 EF
7E05 03CC 06FF FF00 EF
7E05 03CD 06FF FF00 EF
7E05 03CE 06FF FF00 EF
7E05 03CF 06FF FF00 EF
7E05 03D0 06FF FF00 EF
7E05 03D1 06FF FF00 EF
7E05 03D2 06FF FF00 EF
7E05 03D3 06FF FF00 EF
7E05 034D 06FF FF00 EF
7E05 034E 06FF FF00 EF
7E05 034F 06FF FF00 EF
7E05 0350 06FF FF00 EF
7E05 0351 06FF FF00 EF
7E05 0352 06FF FF00 EF
7E05 0353 06FF FF00 EF
7E05 0354 06FF FF00 EF
7E05 0355 06FF FF00 EF
7E05 0356 06FF FF00 EF
7E05 0357 06FF FF00 EF
7E05 0358 06FF FF00 EF
7E05 03B5 06FF FF00 EF
7E05 03B6 06FF FF00 EF
7E05 03B7 06FF FF00 EF
7E05 03B8 06FF FF00 EF
7E05 03B9 06FF FF00 EF
7E05 03BA 06FF FF00 EF
7E05 03BB 06FF FF00 EF
7E05 03BC 06FF FF00 EF
7E05 03BD 06FF FF00 EF
7E05 03BE 06FF FF00 EF
7E05 03BF 06FF FF00 EF
7E05 03C0 06FF FF00 EF
7E05 0300 06FF FF00 EF
CURTAIN
7E05 0339 06FF FF00 EF
7E05 033A 06FF FF00 EF
7E05 033B 06FF FF00 EF
7E05 033C 06FF FF00 EF
7E05 033D 06FF FF00 EF
7E05 033E 06FF FF00 EF
7E05 033F 06FF FF00 EF
7E05 0340 06FF FF00 EF
7E05 0341 06FF FF00 EF
7E05 0342 06FF FF00 EF
7E05 0343 06FF FF00 EF
7E05 0344 06FF FF00 EF
7E05 0345 06FF FF00 EF
7E05 0346 06FF FF00 EF
7E05 0347 06FF FF00 EF
7E05 0348 06FF FF00 EF
7E05 0349 06FF FF00 EF
7E05 034A 06FF FF00 EF
7E05 034B 06FF FF00 EF
7E05 034C 06FF FF00 EF
TRANS
7E05 0303 06FF FF00 EF
7E05 0304 06FF FF00 EF
7E05 0305 06FF FF00 EF
7E05 0306 06FF FF00 EF
7E05 0307 06FF FF00 EF
7E05 0308 06FF FF00 EF
7E05 0309 06FF FF00 EF
7E05 030A 06FF FF00 EF
7E05 030B 06FF FF00 EF
7E05 030C 06FF FF00 EF
7E05 030D 06FF FF00 EF
7E05 030E 06FF FF00 EF
7E05 030F 06FF FF00 EF
7E05 0310 06FF FF00 EF
7E05 0311 06FF FF00 EF
7E05 0312 06FF FF00 EF
7E05 0313 06FF FF00 EF
7E05 0314 06FF FF00 EF
7E05 0315 06FF FF00 EF
7E05 0316 06FF FF00 EF
WATER
7E05 0327 06FF FF00 EF
7E05 0328 06FF FF00 EF
7E05 0329 06FF FF00 EF
7E05 032A 06FF FF00 EF
7E05 032B 06FF FF00 EF
7E05 032C 06FF FF00 EF
7E05 032D 06FF FF00 EF
7E05 032E 06FF FF00 EF
7E05 032F 06FF FF00 EF
7E05 0330 06FF FF00 EF
7E05 0331 06FF FF00 EF
7E05 0332 06FF FF00 EF
7E05 0333 06FF FF00 EF
7E05 0334 06FF FF00 EF
7E05 0335 06FF FF00 EF
7E05 0336 06FF FF00 EF
7E05 0337 06FF FF00 EF
7E05 0338 06FF FF00 EF
FLOW
7E05 038F 06FF FF00 EF
7E05 0390 06FF FF00 EF
7E05 0391 06FF FF00 EF
7E05 0392 06FF FF00 EF
7E05 0393 06FF FF00 EF
7E05 0394 06FF FF00 EF
7E05 0395 06FF FF00 EF
7E05 0396 06FF FF00 EF
7E05 0397 06FF FF00 EF
7E05 0398 06FF FF00 EF
7E05 0399 06FF FF00 EF
7E05 039A 06FF FF00 EF
7E05 039B 06FF FF00 EF
7E05 039C 06FF FF00 EF
7E05 039D 06FF FF00 EF
7E05 039E 06FF FF00 EF
7E05 039F 06FF FF00 EF
7E05 03A0 06FF FF00 EF
7E05 03A1 06FF FF00 EF
7E05 03A2 06FF FF00 EF
7E05 03A3 06FF FF00 EF
7E05 03A4 06FF FF00 EF
7E05 03A5 06FF FF00 EF
7E05 03A6 06FF FF00 EF
TAIL
7E05 0317 06FF FF00 EF
7E05 0318 06FF FF00 EF
7E05 0319 06FF FF00 EF
7E05 031A 06FF FF00 EF
7E05 031B 06FF FF00 EF
7E05 031C 06FF FF00 EF
7E05 031D 06FF FF00 EF
7E05 031E 06FF FF00 EF
7E05 031F 06FF FF00 EF
7E05 0320 06FF FF00 EF
7E05 0321 06FF FF00 EF
7E05 0322 06FF FF00 EF
7E05 0323 06FF FF00 EF
7E05 0324 06FF FF00 EF
7E05 0325 06FF FF00 EF
7E05 0326 06FF FF00 EF
RUN
7E05 0359 06FF FF00 EF
7E05 035B 06FF FF00 EF
7E05 035D 06FF FF00 EF
7E05 035F 06FF FF00 EF
7E05 0361 06FF FF00 EF
7E05 0363 06FF FF00 EF
7E05 0365 06FF FF00 EF
7E05 0367 06FF FF00 EF
7E05 0369 06FF FF00 EF
7E05 036B 06FF FF00 EF
7E05 036D 06FF FF00 EF
7E05 036F 06FF FF00 EF
7E05 0371 06FF FF00 EF
7E05 0373 06FF FF00 EF
7E05 0375 06FF FF00 EF
7E05 0377 06FF FF00 EF
7E05 0379 06FF FF00 EF
7E05 037B 06FF FF00 EF
7E05 037D 06FF FF00 EF
7E05 037F 06FF FF00 EF
7E05 0381 06FF FF00 EF
7E05 0383 06FF FF00 EF
7E05 0385 06FF FF00 EF
7E05 0387 06FF FF00 EF
7E05 0389 06FF FF00 EF
7E05 038B 06FF FF00 EF
7E05 038D 06FF FF00 EF
7E05 03A7 06FF FF00 EF
7E05 03A9 06FF FF00 EF
7E05 03AB 06FF FF00 EF
7E05 03AD 06FF FF00 EF
7E05 03AF 06FF FF00 EF
7E05 03B1 06FF FF00 EF
7E05 03B3 06FF FF00 EF
RUNBACK
7E05 035A 06FF FF00 EF
7E05 035C 06FF FF00 EF
7E05 035E 06FF FF00 EF
7E05 0360 06FF FF00 EF
7E05 0362 06FF FF00 EF
7E05 0364 06FF FF00 EF
7E05 0366 06FF FF00 EF
7E05 0368 06FF FF00 EF
7E05 036A 06FF FF00 EF
7E05 036C 06FF FF00 EF
7E05 036E 06FF FF00 EF
7E05 0370 06FF FF00 EF
7E05 0372 06FF FF00 EF
7E05 0374 06FF FF00 EF
7E05 0376 06FF FF00 EF
7E05 0378 06FF FF00 EF
7E05 037A 06FF FF00 EF
7E05 037C 06FF FF00 EF
7E05 037E 06FF FF00 EF
7E05 0380 06FF FF00 EF
7E05 0382 06FF FF00 EF
7E05 0384 06FF FF00 EF
7E05 0386 06FF FF00 EF
7E05 0388 06FF FF00 EF
7E05 038A 06FF FF00 EF
7E05 038C 06FF FF00 EF
7E05 038E 06FF FF00 EF
7E05 03A8 06FF FF00 EF
7E05 03AA 06FF FF00 EF
7E05 03AC 06FF FF00 EF
7E05 03AE 06FF FF00 EF
7E05 03B0 06FF FF00 EF
7E05 03B2 06FF FF00 EF
7E05 03B4 06FF FF00 EF
//
// ViewController.swift
// btled
//
// Created by jason van cleave on 9/3/23.
//
import UIKit
import CoreBluetooth
class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {
var btDevice:CBPeripheral!
var centralManager: CBCentralManager!
override func viewDidLoad() {
super.viewDidLoad()
centralManager = CBCentralManager(delegate: self, queue: nil)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
startScanning()
} else {
// Handle other Bluetooth states
}
}
func startScanning() {
centralManager.scanForPeripherals(withServices: nil, options: nil)
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let name = peripheral.name
{
if(name.contains("MELK"))
{
print("Name: \(name)")
self.btDevice = peripheral;
self.btDevice.delegate = self
centralManager.stopScan()
centralManager.connect(self.btDevice, options: nil)
}
}
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print("Name CONNECTED \(peripheral.name)")
//peripheral.readRSSI()
peripheral.discoverServices(nil)
}
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
print("Name FAILED \(peripheral.name)")
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
if let services = peripheral.services {
for service in services
{
var IDS = [CBUUID]();
//IDS.append(CBUUID(string: "00002a00-0000-1000-8000-00805f9b34fb"))
//IDS.append(CBUUID(string: "0000fff4-0000-1000-8000-00805f9b34fb"))
IDS.append(CBUUID(string: "0000fff3-0000-1000-8000-00805f9b34fb"))
peripheral.discoverCharacteristics(IDS, for: service)
}
}
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverIncludedServicesFor service: CBService, error: Error?) {
if let includedServices = service.includedServices {
for includedService in includedServices {
print("Discovered Included Service: \(includedService)")
}
}
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
print("Discovered Service: \(service)")
print("Discovered Service UUID: \(service.uuid)")
if let characteristics = service.characteristics {
for characteristic in characteristics {
peripheral.setNotifyValue(true, for: characteristic)
print("Discovered characteristic: \(characteristic)")
print("Characteristic UUID: \(characteristic.uuid)")
print("Characteristic uuidString: \(characteristic.uuid.uuidString)")
print("Characteristic Value: \(characteristic.value ?? Data())")
print("Characteristic Properties: \(characteristic.properties.rawValue)")
print("Characteristic Descriptors: \(characteristic.descriptors ?? [])")
print("Characteristic IsNotifying: \(characteristic.isNotifying)")
print("characteristic value: \(characteristic.value)")
var propString = "PROPS: "
if characteristic.properties.contains(.read)
{
propString += "read\n"
}
if characteristic.properties.contains(.write)
{
propString += "write\n"
}
if characteristic.properties.contains(.writeWithoutResponse)
{
propString += "writeWithoutResponse\n"
sendDataToPeripheral(peripheral, characteristic: characteristic)
}
if characteristic.properties.contains(.notify)
{
propString += "notify\n"
}
if characteristic.properties.contains(.indicate)
{
propString += "indicate\n"
}
if characteristic.properties.contains(.authenticatedSignedWrites)
{
propString += "authenticatedSignedWrites\n"
}
if characteristic.properties.contains(.extendedProperties)
{
propString += "extendedProperties\n"
}
if characteristic.properties.contains(.broadcast)
{
propString += "broadcast\n"
}
print("propString : \(propString) \n")
print("characteristic.properties \(characteristic.properties)")
}
}
/*if let characteristic = service.characteristics?.last {
self.targetCharacteristic = characteristic
sendDataToPeripheral()
}*/
}
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if let error = error {
print("Error updating characteristic value: \(error)")
} else {
if let value = characteristic.value {
// Handle the updated characteristic value
print("Updated characteristic value: \(value)")
}
}
}
func hexStringToData(_ hexString: String) -> Data {
var hex = hexString.replacingOccurrences(of: " ", with: "")
var data = Data()
while !hex.isEmpty {
let substringIndex = hex.index(hex.startIndex, offsetBy: 2)
let byteString = String(hex[..<substringIndex])
hex = String(hex[substringIndex...])
if let byte = UInt8(byteString, radix: 16) {
data.append(byte)
}
}
return data
}
func sendDataToPeripheral(_ peripheral: CBPeripheral, characteristic: CBCharacteristic) {
let dataValuesON: [UInt8] = [0x7e, 0x00, 0x04, 0xf0, 0x00, 0x01, 0xff, 0x00, 0xef]
let dataValuesOFF: [UInt8] = [0x7e, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0x00, 0xef]
let data = Data(dataValuesON)
peripheral.writeValue(data, for: characteristic, type: .withoutResponse)
//let dataValues: [UInt8] = [0x7e, 0x00, 0x04, 0xf0, 0x00, 0x01, 0xff, 0x00, 0xef]
//7E0404000000FF00EF
//7E0404F00001FF00EF
//let hexString = "7E0404F00001FF00EF"
//let data = hexStringToData(hexString)
}
func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {
if let error = error {
print("Error readRSSI: \(error)")
} else {
print("readRSSI success \(RSSI)")
}
}
func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
if let error = error {
print("Error writing value to characteristic: \(error)")
} else {
print("Data written to characteristic successfully")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment