Многие решения IoT включают одно основное требование: точно знать, где они находятся в мире.
Хотя для определения местоположения обычно используется модуль GNSS/GPS, есть сценарии, в которых GPS не является надежным или практичным. На самом деле, я приведу три точных сценария:
- Развертывание в помещении, где получение спутниковой привязки GPS невозможно.
- Использование физического корпуса, который препятствует фиксации GPS.
- Маломощные решения, которые не могут позволить себе потребление энергии GPS.
В Blues Wireless, когда мы говорим о сборе координат широты/долготы, мы обычно обращаемся к встроенным GPS возможностям Cellular Notecard, которые мы настоятельно рекомендуем в качестве первого (и часто единственного) способа определения местоположения.
Однако сегодня я хочу более подробно рассмотреть менее известную возможность Notecard: Триангуляция сотовых вышек и Wi-Fi.
Триангуляция
Если вы проходили базовые курсы тригонометрии или геометрии, вы уже знаете, что триангуляция — это процесс определения местоположения путем построения треугольников к интересующей вас точке из ряда других известных точек.
Notecard предоставляет встроенные возможности использования триангуляции несколькими различными способами: триангуляция сотовых вышек, триангуляция Wi-Fi или оба способа!
Определение местоположения сотовых вышек
Если у вас есть опыт работы с Notecard Cellular, вы, вероятно, заметили параметры tower_
, которые появляются в событиях Notehub:
"tower_when": 1656000634,
"tower_lat": 43.074087500000005,
"tower_lon": -89.44282812499999,
"tower_country": "US",
"tower_location": "Shorewood Hills WI",
"tower_timezone": "America/Chicago",
"tower_id": "310,410,17169,77315594",
Значения tower_lat
и tower_lon
представляют собой приблизительное местоположение единственной сотовой вышки, к которой была подключена эта Notecard в данный момент времени tower_when
. Хотя это хорошее (приблизительное) местоположение, само по себе оно бесполезно при попытке определить точное местоположение устройства.
Например, вот примерное положение сотовой вышки, использованной в недавнем запросе, относительно моего местоположения:
Триангуляция сотовых вышек
В сценариях, где GPS непригоден, выполнение триангуляции сотовых вышек с помощью Notecard может значительно улучшить ситуацию благодаря волшебному API card.triangulate.
Чтобы включить триангуляцию сотовых вышек на нотекарте Cellular, просто выполните этот запрос:
{
"req": "card.triangulate",
"mode": "cell"
}
В следующий раз, когда Notecard установит новую сессию с Notehub, информация о каждой видимой сотовой вышке будет загружена и обработана. Новый набор данных о местоположении будет появляться в каждом событии Notehub с предварением tri_
, как показано ниже:
"tri_when": 1656011112,
"tri_lat": 43.07113895,
"tri_lon": -89.43272533,
"tri_location": "Shorewood Hills WI",
"tri_country": "US",
"tri_timezone": "America/Chicago",
"tri_points": 16,
Вот обновленная оценка местоположения, основанная только на триангуляции сотовых вышек:
Как вы можете видеть, фактическое местоположение значительно улучшилось, и будет только улучшаться по мере того, как будет видно больше вышек сотовой связи.
ПРИМЕЧАНИЕ: Важно знать, что триангуляция сотовых вышек сопровождается нетривиальным снижением мощности, поскольку сканирование модема на наличие близлежащих сотовых вышек может занять почти столько же времени, сколько вся синхронизация. Триангуляция также происходит только во время подключения к Notehub, и нет способа «повторной триангуляции» во время
непрерывной
сессии Notehub.
Триангуляция по Wi-Fi
Если ваш главный MCU имеет встроенный модуль Wi-Fi (например, ESP32), вы можете выполнить сканирование точки доступа Wi-Fi (AP) и отправить эти данные на Notecard для выполнения триангуляции Wi-Fi.
ПРИМЕЧАНИЕ: Wi-Fi триангуляция — это экспериментальная, техническая функция предварительного просмотра от Blues Wireless, которая бесплатна
для использования сегодня, но может использовать потребительские кредиты в
в будущем.
Формат вызова card.triangulate
немного отличается при использовании Wi-Fi триангуляции. Обратите внимание, что при включении триангуляции можно использовать cell
, wifi
или оба варианта с wifi,cell
.
{
"req": "card.triangulate",
"mode": "wifi",
"text": "+CWLAP:(4,"Blues",-51,"74:ac:b9:12:12:f8",1)n+CWLAP:(3,"AAAA-62DD",-70,"6c:55:e8:91:62:e1",11)n+CWLAP:(4,"Blues",-81,"74:ac:b9:11:12:23",1)n+CWLAP:(4,"Blues",-82,"74:ac:a9:12:19:48",11)n+CWLAP:(4,"Free Parking",-83,"02:18:4a:11:60:31",6)n+CWLAP:(5,"GO",-84,"01:13:6a:13:90:30",6)n+CWLAP:(4,"AAAA-5C62-2.4",-85,"d8:97:ba:7b:fd:60",1)n+CWLAP:(3,"DIRECT-a5-HP MLP50",-86,"fa:da:0c:1b:16:a5",6)n+CWLAP:(3,"DIRECT-c6-HP M182 LaserJet",-88,"da:12:65:44:31:c6",6)nn"
}
Что это за страшное поле text
? Это список точек доступа Wi-Fi, заканчивающийся новой строкой и повторяющий вывод команды AT+CWLAP ESP32.
Получение данных о точках доступа с помощью Arduino
Если вы умеете выдавать AT-команды своему MCU, вы можете послать AT+CWLAP
и отформатировать ответ в соответствии с приведенными выше требованиями. Однако не многие из нас так хорошо знакомы с синтаксисом AT, поэтому мы предоставляем следующие материалы
Библиотека Notecard Auxiliary Wi-Fi Arduino
для более простого способа программного получения списка точек доступа Wi-Fi с помощью
вашего MCU с поддержкой Wi-Fi и отправки их на Notecard одной командой:
// Update Notecard Triangulation Data
aux_wifi.updateTriangulationData();
Получение данных о точках доступа с помощью CircuitPython
Разрабатываете с помощью CircuitPython? Вот пример функции, которая использует встроенную библиотеку wifi
для сбора тех же данных WAP при использовании с MCU ESP32:
import wifi
import binascii
def get_wifi_access_points():
""" returns a set of visible access points, corresponds to esp32 AT+CWLAP format """
# https://docs.espressif.com/projects/esp-at/en/latest/esp32/AT_Command_Set/Wi-Fi_AT_Commands.html#cmd-lap
all_wifi_aps = ""
for network in wifi.radio.start_scanning_networks():
wifi_ap = "+CWLAP:("
if wifi.AuthMode.ENTERPRISE in network.authmode:
wifi_ap += "5"
elif wifi.AuthMode.PSK in network.authmode:
wifi_ap += "6"
elif wifi.AuthMode.WPA3 in network.authmode:
wifi_ap += "6"
elif wifi.AuthMode.WPA2 in network.authmode:
wifi_ap += "3"
elif wifi.AuthMode.WPA in network.authmode:
wifi_ap += "2"
elif wifi.AuthMode.WEP in network.authmode:
wifi_ap += "1"
else:
wifi_ap += "0"
bssid = binascii.hexlify(network.bssid).decode("ascii")
bssid = ':'.join(bssid[i:i+2] for i in range(0,12,2))
wifi_ap = wifi_ap + ","" + str(network.ssid) + ""," + str(network.rssi) + ","" + bssid + ""," + str(network.channel) + ")n"
all_wifi_aps += wifi_ap
wifi.radio.stop_scanning_networks()
return all_wifi_aps
Wi-Fi триангуляция в действии
Насколько отличаются мои результаты при использовании триангуляции Wi-Fi? Единственной точкой доступа, которую смог найти ESP32, был мой собственный маршрутизатор. Однако даже при использовании только одной точки доступа вот результаты:
"tri_when": 1656011112,
"tri_lat": 43.07113895,
"tri_lon": -89.43272533,
"tri_location": "Shorewood Hills WI",
"tri_country": "US",
"tri_timezone": "America/Chicago",
"tri_points": 16,
Что становится удивительно точным при отображении на карте!
Wi-Fi триангуляция становится еще более ценной, когда вы понимаете, что требования к питанию минимальны, и она добавляет всего 1-2 секунды к времени синхронизации с Notehub.
Обязательно ознакомьтесь с документацией разработчика по триангуляции сотовых вышек и Wi-Fi, поскольку в Notehub есть дополнительные настройки, которые вы можете изменить в зависимости от того, как вы используете триангуляцию в своем решении.
Триангуляция с помощью Wi-Fi Notecard
До сих пор все эти инструкции были связаны с использованием нотной карты сотовой связи. А что если вы используете Wi-Fi Notecard (которая не имеет встроенного модуля GNSS/GPS)?
К счастью, триангуляция Wi-Fi включена на Wi-Fi Notecard по умолчанию, никаких изменений в конфигурации не требуется!
После настройки Wi-Fi Notecard вот какие результаты были получены в данном случае:
"tri_when": 47,
"tri_lat": 43.07121864,
"tri_lon": -89.43263674,
"tri_location": "Shorewood Hills WI",
"tri_country": "US",
"tri_timezone": "America/Chicago",
"tri_points": 3,
Что, опять же, при отображении на карте, шокирующе близко к моему местоположению:
Резюме
Хотя GPS является стандартом де-факто для определения точного местоположения IoT-устройства и всегда должен быть первым вариантом при сборе данных о местоположении, возможности триангуляции Notecard предоставляют варианты, когда GPS недоступен.
Счастливого картографирования с Notecard и Notehub! 📍🗺