Да, это возможно и с прошивкой новее v538 (проверить версию можно командой "AT-VERS?") тоже несложно.
SoftwareSerial mySerial(8, 9); // RX, TX
// Connect HM10 Arduino Uno
// Pin 1/TXD Pin 7
// Pin 2/RXD Pin 8
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}
void loop(){
String message;
if (Serial.available()) {
c = Serial.read();
mySerial.print(c);
}
if (mySerial.available()) {
message = "";
delay(10);
while (mySerial.available()) {
c = mySerial.read();
message = message + c;
}
Serial.println(message);
}
Это основной код для подключения к вашему HM10 [контакты rx/tx могут отличаться]. Если вы отправляете «AT» через свой монитор последовательного порта, HM10 должен вернуть «OK».
Возможно, вам потребуется настроить HM10 в качестве центрального устройства BLE, прежде чем вы сможете начать сканирование маяков. Это делается путем отправки:
AT-ROLE1 //устанавливает центральную роль
AT-IMME1 //должен работать без предварительной активации
AT-RESET // перезапускает HM10
После этого, если отправить "AT-DISI?" через монитор последовательного порта HM10 должен начать поиск iBeacons и (в случае, если он его найдет) вернуть следующее [буквы P являются заполнителями]:
OK+ДИСК[P0:P1:P2:P3:P4]
Это сообщение содержит МОЩНОСТЬ (мощность отправляемого сигнала) и RSSI (мощность полученного сигнала) iBeacon, из которых можно вычесть расстояние до маяка.
Последние 2 цифры P3 содержат МОЩНОСТЬ iBeacon, P4 — значение RSSI. [примечание: 2 цифры мощности являются шестнадцатеричными значениями, вам нужно сначала преобразовать их в десятичные значения --- число должно быть где-то около 190]
Наиболее распространенный способ измерения расстояния между маяками (насколько я знаю):
расстояние = 10 ^ ((POWER-RSSI) / 10n) [n между 2 и 4, я использую 2]
:) Я надеюсь, что это поможет и удачи в вашем проекте.
person
David Schraudt
schedule
21.04.2017