Stap 6: Code
Onder importeren toevoegen UIKit,
import CoreBluetooth
Dit laadt het BLE-kader.
Wijzigen van uw klassendefinitie te laten uitzien als dit,
class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate
Dit verbindt de Main View afluistert voor acties die worden uitgevoerd door de iPhone BLE en de HM-10.
Aangezien we toegevoegd de CBCentralManagerDelegate wij de centralManagerDidUpdateState moet toevoegen. Deze functies horloges het iOS apparaat van Bluetooth-apparaat. Als staten verandert (bijvoorbeeld Bluetooth uitstaat) dan is deze functie wordt uitgevoerd.
func centralManagerDidUpdateState(central: CBCentralManager?) { if let central = central{ if central.state == CBCentralManagerState.PoweredOn { println("Bluetooth ON") } else { println("Bluetooth switched off or not initialized") } } }
Kortom, alles wat we hier doen is af te drukken naar systeem of de BLE heb uitgeschakeld. U dit hiervoor allerlei mooie dingen kan veranderen, maar wij zullen het eenvoudig houden.
Nu, hier is waar het wordt leuk! Laten we het toevoegen van een functie om te grijpen alle gegevens vanuit de HM-10 en op de navigatie balk titel afdrukken.
Gegevenswaarden krijgen wanneer ze worden bijgewerkt // Get data values when they are updated func peripheral(peripheral: CBPeripheral?, didUpdateValueForCharacteristic characteristic: CBCharacteristic?, error: NSError!) { if let characteristicValue = characteristic?.value{ var datastring = NSString(data: characteristicValue, encoding: NSUTF8StringEncoding) if let datastring = datastring{ navigationItem.title = datastring as String } } }
Een paar dingen van opmerking hier, var datastring = NSString (gegevens: characteristicValue, encoding: NSUTF8StringEncoding) is eigenlijk het verkrijgen van de gegevens uit de RX-buffer, converteren naar een NSString. De if laat datastring = datastring is de optionele, vervolgens stellen de navigatie balk titel aan de RX-reeks kunnen uitpakken. Handig, hè?
Mind you, het kon maken van de ontvanger van de gegevens om het even wat die een tekenreeks. Ik gebruikte gewoon de navigatie balk titel zodat we niet hoefde andere items toe te voegen.
Oke, krijgen we dicht bij het einde. Wat over het verzenden van tekst?
// Write function func writeValue(data: String){ let data = (data as NSString).dataUsingEncoding(NSUTF8StringEncoding) if let peripheralDevice = peripheralDevice{ if let deviceCharacteristics = deviceCharacteristics{ peripheralDevice.writeValue(data, forCharacteristic: deviceCharacteristics, type: CBCharacteristicWriteType.WithoutResponse) } } }
Deze functie is eigenlijk een voorbereiding gegevensfunctie voor het echte werkpaard: peripheralDevice.writeValue (gegevens, karakteristiek).
De wrapper functie die ik heb gemaakt, writeValue(String), neemt een string, het zet het naar UTF8 gegevensformaat, dat de indeling die nodig zijn voor writeValue (data, karakteristiek is). Het controleert vervolgens of er een randapparaat te schrijven van de waarden. Als er, roept de functie van de writeValue met behulp van de gegevens die u doorgegeven.
Als dat verwarrend lijkt, gewoon weten, het duurt een string en verzendt het naar het ontvangende apparaat.
U kunt deze writeValue functie aanroepen vanuit een knop, zoals de 'Verzenden' knop die we opzetten.
func sendButton(sender: AnyObject) { if let text = sendTextField{ writeValue(sendTextField.text) } }
Dit zorgt ervoor dat onze knop om te grijpen wat u hebt getypt in het vak tekstveld en stuur het naar het ontvangende apparaat, door middel van de handige kleine writeValue(String) functie die we gemaakt.
OK! Thats it. (Ik hoop. Gulp.)
Wanneer u klaar bent van uw ViewController code moet op zoek naar iets als dit,