1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/walkline-esp32-ble-beacon_locating

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ESP32 BLE — Определение местоположения Beacons

Проект

Используется разработка ESP32 для тестирования функциональности определения местоположения beacon.

Получение полного проекта

Поскольку проект использует подмодули MicroPython BLE Library и MicroPython Beacon Library, чтобы получить полный проект, требуется выполнить следующие действия:

Клонирование

$ git clone --recursive https://gitee.com/walkline/esp32-ble-beacon_locating.git

Загрузка архива

$ cd esp32-ble-beacon_locating
$ git submodule update --init --recursive

Из-за сложной структуры проекта, передача файлов на разработку может вызвать трудности, поэтому рекомендуется использовать инструмент ab для массовой загрузки.

Без получения полного проекта

Если вы загружаете прошивку из каталога firmware/, то она уже включает вышеупомянутые два подмодуля, и можно использовать обычный способ получения проекта.

Тестирование кода на разработке

Здесь используется разработка ESP32 и разработка ESP32C3 для тестирования.

Загрузка кода

  • Использование прошивки с встроенными подмодулями

    $ ab abc-nolib
  • Использование официальной прошивки

    $ ab
  • Без использования инструмента ab ```bash

    Use the appropriate software to download the full project code

    drivers/button.py libs/ble/ble/ libs/beacon/beacon/ utils.py config.py main.py

Включение режима маяка

После первой загрузки кода при повторном запуске устройства переходит в режим сканирования. Нажмите кнопку BOOT более чем на 3 секунды после первого запуска, чтобы перезапустить устройство и войти в режим маяка. LED будет гореть постоянно.

Перейти в режим REPL с помощью инструмента ab.

$ ab --repl

Просмотр полного вывода.

активация BLE...
W (4841) BTDM_INIT: esp_bt_controller_mem_release не реализовано, возвращено OK
I (4841) BTDM_INIT: версия компилятора контроллера Bluetooth [501d88d]
I (4851) coexist: версия ROM coexist 9387209
I (4851) phy_init: версия PHY 500,985899c,Apr 19 2021,16:05:08
I (4971) system_api: базовый адрес MAC не установлен
I (4971) system_api: чтение базового адреса MAC по умолчанию из EFUSE
I (4971) BTDM_INIT: Bluetooth MAC: 7c:df:a1:c2:a3:0e

Процедура GAP начата: остановка рекламы.
BLE активирован
рекламируется...
Процедура GAP начата: реклама; disc_mode=2 adv_channel_map=7 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=160 adv_itvl_max=160
>>>

Войти в режим сканирования

Постоянное свечение LED на плате указывает на то, что текущий режим — это режим маяка. При нажатии и удержании кнопки BOOT более трех секунд устройство будет перезапущено и войдет в режим сканирования, при этом LED на плате выключится.Командная строка:

активация BLE...
I (32694) BTDM_INIT: версия компиляции контроллера Bluetooth [1342a48]
I (32694) system_api: базовый адрес MAC не установлен
I (32694) system_api: чтение базового адреса MAC по умолчанию из EFUSE
I (32704) phy_init: версия PHY 4670, 719f9f6, 18 февраля 2021 года, 17:07:07
BLE активировано
сканирование...
Процедура GAP запущена: открытие; тип собственного адреса = 0, политика фильтрации = 0, пассивный = 1, ограниченный = 0, фильтрация повторяющихся данных = 0, продолжительность = бесконечность

Просмотр данных

Используйте две платы для входа в режимы маяк и сканирование соответственно, чтобы просмотреть вывод платы в режиме сканирование.

[7C:DF:A1:C2:A3:0E] уровень сигнала (-rssi): -54, расстояние: 1.584893 м
[7C:DF:A1:C2:A3:0E] уровень сигнала (-rssi): -60, расстояние: 3.162278 м
[7C:DF:A1:C2:A3:0E] уровень сигнала (-rssi): -53, расстояние: 1.412538 м
[7C:DF:A1:C2:A3:0E] уровень сигнала (-rssi): -55, расстояние: 1.778279 м
[7C:DF:A1:C2:A3:0E] уровень сигнала (-rssi): -57, расстояние: 2.238721 м
[7C:DF:A1:C2:A3:0E] уровень сигнала (-rssi): -53, расстояние: 1.412538 м
[7C:DF:A1:C2:A3:0E] уровень сигнала (-rssi): -54, расстояние: 1.584893 м

Расстояние представляет расстояние между двумя платами, рассчитанное с помощью параметров, единицы измерения: метры

Также можно использовать один режим сканирования для просмотра данных нескольких плат в режиме маяк

Приложение#### Ансинько ESP32C3 разработочная плата контакты

Интегрированные компоненты
Led1 (красный) Led1 (зелёный) Led1 (синий) Led2 Led3 Кнопка2
IO3 IO4 IO5 IO18 IO19 IO9
Доступные GPIO
Номер
12F 0, 1, 2, 3, 4, 5, 8, 9, 10, 18, 19, 20, 21
13 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 19, 20, 21
13U 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 19, 20, 21
32S 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 19, 20, 21

libs/ подмодульные записи

Недавно освоил использование git submodule, поэтому решил применить его здесь.

Округление 1

Прям так сразу добавил подмодуль

$ git submodule add https://gitee.com/walkline/micropython-ble-library ble-lib/ble

Результат: импорт не поддерживает пути с дефисами.

Округление 2

После некоторых размышлений путь к подмодулю был установлен как libs/ble и libs/beacon. Для обеспечения совместимости с способом использования без полной загрузки проекта были применены следующие хаки:

try:
    from ble.tools import BLETools  # Сначала попытаемся импортировать модуль из прошивки
    from ble.beacon.client.ibeacon import iBeacon
except:
    from libs.ble.ble.tools import BLETools  # Если это не удалось, то импортируем из раздела пользователя
    from libs.beacon.ble.beacon.client.ibeacon import iBeacon

Похоже, всё в порядке? Тогда давайте сразу же проверим!

Нашли платформу, специально прошитую без модуля ble, использовали инструмент ab для загрузки файла, открыли Thonny и ввели код:```python

from libs.ble.ble.tools import BLETools Traceback (most recent call last): File "", line 1, in File "libs/ble/ble/init.py", line 2, in File "libs/ble/ble/tools.py", line 8, in ImportError: нет модуля 'ble'


Неожиданность! Код 8 строки файла `tools.py` выглядит так:

```python
from ble.const import BLEConst
Окружность 3

Неужели придётся менять код в директории libs/? Это же никак не универсально!

И наконец, используя идею порядка загрузки пакетов, нашёл список sys.path. Давайте сначала посмотрим на его содержимое.

>>> import sys
>>> help(sys)
Объект <module 'sys'> является типом модуль
  __name__ -- sys
  path -- ['', '/lib']
  argv -- []
  version -- 3.4.0
  version_info -- (3, 4, 0)
  implementation -- (name='micropython', version=(1, 12, 0), mpy=10757)
  platform -- esp32
  byteorder -- little
  maxsize -- 2147483647
  exit -- <функция>
  stdin -- <io.FileIO 0>
  stdout -- <io.FileIO 1>
  stderr -- <io.FileIO 2>
  modules -- {'flashbdev': <module 'flashbdev' from 'flashbdev.py'>}
  print_exception -- <функция>
>>>

Смотрите документацию и узнайте, что этот sys.path представляет собой путь поиска модулей при импорте, по умолчанию <root> и /lib (по слухам, на PyBoard есть ещё пути вроде 0:/lib и 1:/flash, но здесь мы их не рассматриваем). Поскольку это список, можно добавлять свои пути, поэтому попробовал следующий подход:

>>> import sys
>>> sys.path.append('libs/ble')
>>> sys.path.append('libs/beacon')
>>> from ble.tools import BLETools
>>>
```Похоже, работает? Проверим после перезапуска устройства!
```python
>>> import sys
>>> sys.path.append('libs/ble')
>>> sys.path.append('libs/beacon')
>>> from ble.tools import BLETools
>>> from ble.beacon.client.ibeacon import iBeacon
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: нет модуля с именем 'ble.beacon'
>>>
Окружность 4

Занимательная проблема!

Ключевой момент здесь — порядок добавления путей в sys.path. Сначала был добавлен путь 'libs/ble', а затем попытка импорта ble.beacon нашла совпадение в пути 'libs/ble/ble', где модуль beacon отсутствует. Пробуем следующее:

>>> import sys
>>> sys.path.append('libs/beacon') # Изменяем порядок
>>> sys.path.append('libs/ble')
>>> from ble.beacon.client.ibeacon import iBeacon
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "libs/beacon/ble/beacon/client/ibeacon/iBeacon.py", line 11, in <module>
ImportError: нет модуля с именем 'ble.const'
>>>

Это подтверждает наши догадки, но как решить эту проблему?

Окружность 5

Одним из способов решения является одновременный импорт всех файлов из модуля.

Предположим, что в файле libs/ble/ble/__init__.py присутствуют следующие строки:

from .const import *
from .tools import *
from .characteristics import *
from .descriptors import *
from .profile import *
from .services import *

Тогда мы можем сделать следующую попытку:

>>> import sys
>>> sys.path.append('libs/ble')
>>> from ble import *
>>> sys.path.remove('libs/ble')
>>> sys.path.append('libs/beacon')
>>> from ble.beacon.client.ibeacon import iBeacon
>>>

Близко к идеалу! Однако при этом происходит импорт множества модулей:

>>> print('\n'.join(sys.modules.keys()))
  'ble.characteristics.__characteristic'
  'ble.beacon.client.ibeacon.iBeacon'
  'ble.profile'
  'ble.descriptors.descriptors'
  'ble.beacon.client'
  'ble.descriptors.__descriptor'
  'flashbdev'
  'ble.descriptors'
  'ble.characteristics'
  'ble.characteristics.characteristics'
  'ble.beacon.client.ibeacon'
  'ble.services'
  'ble.services.__service'
  'ble.const'
  'ble.tools'
  'ble'
  'ble.services.services'
  'ble.beacon'
```##### Окончательное решение

Итоговым решением стало создание новой `libs` ветки для [MicroPython Beacon Library](https://gitee.com/walkline/micropython-beacon-library/tree/libs/), с корректировкой структуры директорий и изменением нескольких путей импорта внутри файлов. После этого была сделана попытка следующего типа:
```python
>>> import sys
>>> sys.path.append('libs/ble')
>>> sys.path.append('libs/beacon')
>>> from ble.tools import BLETools
>>> from beacon.client.ibeacon import iBeacon
>>>
>>> print('\n'.join(sys.modules.keys()))
flashbdev
beacon
beacon.client.ibeaconaibeacon
ble.tools
beacon.clientaibeaconiBeacon
ble.const
ble
beacon.client
>>>

Проблема решена успешно

Контакты для сотрудничества и общения

  • Электронная почта: walkline@163.com
  • Группы в QQ:
    • Walkline IoT: 163271910
    • Shenbei IoT: 31324057

Walkline IoTShenbei IoT

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/walkline-esp32-ble-beacon_locating.git
git@api.gitlife.ru:oschina-mirror/walkline-esp32-ble-beacon_locating.git
oschina-mirror
walkline-esp32-ble-beacon_locating
walkline-esp32-ble-beacon_locating
master