私は Adafruit Bluefruit Feather を使って、データを収集し、データを iPhone に送信して読み取って処理するデバイスを構築しています。デバイスをプログラムする方法を説明しようとする数え切れないほどの例を見てきましたが、デバイスを Bluetooth 経由で iPhone に接続する方法について誤解しているようです。
このコードは Adafruit の例の 1 つに基づいており、Adafruit BLE Gatt ライブラリ ( https://learn.adafruit.com/introducing-adafruit-ble-bluetooth-low-energy-friend/ble-gatt)、しかし機能していません。Bluetoothを使用するのはこれが初めてです。使用している iOS コードはhttps://github.com/nebs/hello-bluetoothからのものです。Swift コードに変更を加えていません。どんなアドバイスでも大歓迎です。アプリから arduino へのデータ送信については多くのことがわかりましたが、arduino からアプリへのデータ送信に関する情報は限られていました。私たちが正しい方向に進んでいるかどうか、またはデータの送信に関して変更が必要な場合は、お知らせいただければ幸いです。
以下は、私がこれまで取り組んできたことです。
#include <Arduino.h>
#include <SPI.h>
#if not defined (_VARIANT_ARDUINO_DUE_X_) && not defined (_VARIANT_ARDUINO_ZERO_)
#include <SoftwareSerial.h>
#endif
#include "Adafruit_BLE.h"
#include "Adafruit_BluefruitLE_SPI.h"
#include "Adafruit_BluefruitLE_UART.h"
#include "BluefruitConfig.h"
#include "Adafruit_BLEGatt.h"
#define FACTORYRESET_ENABLE 1
Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);
Adafruit_BLEGatt gatt(ble);
void error(const __FlashStringHelper*err) {
Serial.println(err);
while (1);
}
int32_t gattServiceId;
int32_t gattNotifiableCharId;
int32_t gattWritableResponseCharId;
int32_t gattWritableNoResponseCharId;
int32_t gattReadableCharId;
int32_t jumperPresentID;
void setup(void){
while (!Serial); // required for Flora & Micro
delay(500);
boolean success;
Serial.begin(115200);
randomSeed(micros());
Serial.print(F("Initialising the Bluefruit LE module: "));
if ( !ble.begin(VERBOSE_MODE) ){
error(F("Couldn't find Bluefruit, make sure it's in CoMmanD mode & check wiring?"));
}
Serial.println( F("OK!") );
if ( FACTORYRESET_ENABLE ){
Serial.println(F("Performing a factory reset: "));
if ( ! ble.factoryReset() ){
error(F("Couldn't factory reset"));
}
}
ble.echo(false);
Serial.println("Requesting Bluefruit info:");
ble.info();
Serial.println(F("Adding the Custom GATT Service definition: "));
success = ble.sendCommandWithIntReply( F("AT+GATTADDSERVICE=UUID128=00-77-13-12-10-00-00-00-00-00-EE-BA-AD-DA-BE-CF"), &gattServiceId);
if (! success) {
error(F("Could not add Custom GATT service"));
}
Serial.println(F("Adding the Notifiable characteristic: "));
success = ble.sendCommandWithIntReply( F("AT+GATTADDCHAR=UUID128=00-67-42-01-14-88-59-77-42-42-AB-BA-DA-DA-EE-CC,PROPERTIES=0x10,MIN_LEN=1, MAX_LEN=20, VALUE=-9999"), &gattNotifiableCharId);
if (! success) {
error(F("Could not add Custom Notifiable characteristic"));
}
Serial.println(F("Adding the Writable with Response characteristic: "));
success = ble.sendCommandWithIntReply( F("AT+GATTADDCHAR=UUID128=00-68-42-02-00-77-12-10-13-42-CC-BA-DE-FA-EA-BB,PROPERTIES=0x04,MIN_LEN=1, MAX_LEN=20, VALUE=GREEN"), &gattWritableResponseCharId);
if (! success) {
error(F("Could not add Custom Writable with Response characteristic"));
}
Serial.println(F("Adding the Writable with No Response characteristic: "));
success = ble.sendCommandWithIntReply( F("AT+GATTADDCHAR=UUID128=00-69-42-03-00-77-12-10-13-42-CC-BA-DE-FA-EA-BC,PROPERTIES=0x08,MIN_LEN=1, MAX_LEN=20, VALUE=GREEN"), &gattWritableNoResponseCharId);
if (! success) {
error(F("Could not add Custom Writable with No Response characteristic"));
}
Serial.println(F("Adding the Readable characteristic: "));
success = ble.sendCommandWithIntReply( F("AT+GATTADDCHAR=UUID128=00-70-42-04-00-77-12-10-13-42-CC-BA-DE-FA-EA-BD,PROPERTIES=0x02,MIN_LEN=1, MAX_LEN=20, VALUE=GREEN"), &gattReadableCharId);
if (! success) {
error(F("Could not add Custom Readable characteristic"));
}
Serial.print(F("Adding Custom GATT Service UUID to the advertising payload: "));
ble.sendCommandCheckOK( F("AT+GAPSETADVDATA=02-01-06-03-02-12-13") );
jumperPresentID = gatt.addCharacteristic(0x04, GATT_CHARS_PROPERTIES_INDICATE, 5, 5, 5);
/* Reset the device for the new service setting changes to take effect */
Serial.print(F("Performing a SW reset (service changes require a reset): "));
ble.reset();
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(A4, INPUT);
pinMode(A5, INPUT);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
digitalWrite(A3, LOW);
digitalWrite(A4, LOW);
digitalWrite(A5, LOW);
}
void loop(void){
Serial.println("VOLTAGE");
int sensorValue = analogRead(A1);
float voltage = sensorValue * (3.3 / 1023.0);
delay(2000);
Serial.println(voltage);
if(voltage == 0){
Serial.println("ALERT");
}
if(analogRead(A1) == 0 || analogRead(A2) == 0 || analogRead(A3) == 0 || analogRead(A4) == 0 || analogRead(A5) == 0){
Serial.print("one is removed");
gatt.setChar(jumperPresentID, 0, 5);
}else{
gatt.setChar(jumperPresentID, 2, 5);
}
Serial.println(voltage);
delay(2000);
}
編集:Arduinoシリアルポートからの出力を追加しました
Adafruit Bluefruit AT コマンドの例 ------------------------------------- Bluefruit LE モジュールの初期化: OK! 工場出荷時リセットの実行: AT+FACTORYRESET
<- OK ATE=0
<- OK Bluefruit 情報のリクエスト: ---------------- BLESPIFRIEND nRF51822 QFACA10 5953B6F51A2BE44E 0.6.7 0.6.7 Sep 17 2015 S110 8.0.0, 0.2 -------- -------- カスタム GATT サービス定義の追加: AT+GATTADDSERVICE=UUID128=00-77-13-12-10-00-00-00-00-00-EE-BA-AD-DA-BE -CF
<- 1
<- OK Notifiable 特性の追加: AT+GATTADDCHAR=UUID128=00-67-42-01-14-88-59-77-42-42-AB-BA-DA-DA-EE-CC,PROPERTIES=0x10, MIN_LEN=1、MAX_LEN=20、VALUE=-9999
<- 1
<- OK 応答特性を持つ Writable の追加: AT+GATTADDCHAR=UUID128=00-68-42-02-00-77-12-10-13-42-CC-BA-DE-FA-EA-BB,PROPERTIES= 0x04、MIN_LEN=1、MAX_LEN=20、値=緑
<- 2
<- OK 応答なしの Writable 特性を追加: AT+GATTADDCHAR=UUID128=00-69-42-03-00-77-12-10-13-42-CC-BA-DE-FA-EA-BC,PROPERTIES =0x08、MIN_LEN=1、MAX_LEN=20、値=GREEN
<- 3
<- OK 読み取り可能な特性を追加: AT+GATTADDCHAR=UUID128=00-70-42-04-00-77-12-10-13-42-CC-BA-DE-FA-EA-BD,PROPERTIES=0x02, MIN_LEN=1、MAX_LEN=20、VALUE=GREEN
<- 4
<- OK 広告ペイロードにカスタム GATT サービス UUID を追加: AT+GAPSETADVDATA=02-01-06-03-02-12-13
<- OK AT+GATTADDCHAR=UUID=4,PROPERTIES=32,MIN_LEN=5,MAX_LEN=5,DATATYPE=5 オプション エラー: DATATYPE=5
<- SW リセットの実行中のエラー (サービスの変更にはリセットが必要です): ATZ
<- OK VOLTAGE 0.97 AT+GATTCHAR=0,01-00-01-02-EE
<- エラー 0.97 電圧 0.15 AT+GATTCHAR=0,01-00-01-02-EE