Запуск и включение интерфейса BLE
Чтобы включить BLE-часть модуля WA2000, сначала нужно запустить объект wln. Для этого требуется:
- Настроить линии ввода-вывода общего назначения (GPIO), через которые подключается WA2000
- Выполнить сброс WA2000
- Загрузить WA2000 методом wln.boot
Подробно о процессе загрузки рассказано в разделе Запуск интерфейса Wi-Fi, поэтому основы инициализации модуля здесь не объясняются.
Ниже приведён код с комментариями, который запускает WA2000. Он затрагивает только то, что необходимо для работы интерфейса BLE.
Const WLN_RST=PL_IO_NUM_51
Const WLN_CS=PL_IO_NUM_49
Const WLN_DI=PL_IO_NUM_52
Const WLN_DO=PL_IO_NUM_50
Const WLN_CLK=PL_IO_NUM_53
declare sub delay_ms(delay as integer)
'====================================================================
sub on_sys_init()
'configure the GPIO lines
wln.csmap=WLN_CS
io.num=WLN_CS
io.enabled=YES
wln.dimap=WLN_DI
wln.domap=WLN_DO
io.num=WLN_DO
io.enabled=YES
wln.clkmap=WLN_CLK
io.num=WLN_CLK
io.enabled=YES
io.num=WLN_RST
io.enabled=YES
wln.disable
'reset the WA2000
io.num=WLN_RST
io.state=LOW
delay_ms(1)
io.state=HIGH
'----- set MAC address (optional) -----
wln.mac="0.2.100.50.23.34"
wln.boot(0)
bt.name="EM2000 node 1" 'all spaces will be deleted, so the name will be "EM2000node1"
bt.emulation=PL_WLN_BT_EMULATION_MODE_MICROCHIP 'added for clarity, this is the defaul value
'allocate TX and RX buffers
bt.txbuffrq(1)
bt.rxbuffrq(1)
sys.buffalloc
'enable the BLE interface and wait for it to become enabled
'(blocking version)
bt.enable
while bt.enabled=NO
wend
bt.advertise=YES 'allow the device to be discoverable
sys.debugprint("BLE is now ready. MAC= "+bt.mac+".\r\n") 'notice how the MAC address is reported here
end sub
sub delay_ms(delay as integer)
sys.timercountms=0
while sys.timercountms<delay
wend
end sub
Как видно, после загрузки модуля методом wln.boot нужно выполнить ещё несколько действий:
- Задать рекламируемое имя в свойстве bt.name. Это имя будет отображаться на центральном устройстве (смартфоне с iOS или Android и т. п.).
- Выбрать режим эмуляции (Nordic или Microchip) свойством bt.emulation (можно пропустить, если вас устраивает эмуляция Microchip по умолчанию).
- Выделить буферы TX и RX (назначьте для каждого хотя бы одну страницу буфера). Подробнее - в разделе Выделение буферов TX и RX.
- Включить BLE методом bt.enable.
- Включить рекламу (advertising) через bt.advertise. Этот шаг нужен, только если устройство должно обнаруживаться, а так бывает не всегда.
У интерфейса BLE есть собственный MAC-адрес. Уникальный MAC-адрес Bluetooth прошивается в WA2000 при производстве. При необходимости можно также задать собственный MAC.
Метод bt.enable асинхронный, поэтому приложению нужно определять, когда BLE действительно включился. В примере выше опрашивается состояние wln.enabled - это блокирующий способ. Неблокирующий способ использует on_bt_event:
...
'enable the BLE interface and wait for it to become enabled
'(blocking version)
bt.enable
end sub
sub on_bt_event(bt_event as enum pl_bt_events)
select case bt_event
case PL_BT_EVENT_CONNECTED:
case PL_BT_EVENT_DISCONNECTED:
case PL_BT_EVENT_ENABLED:
bt.advertise=YES 'allow the device to be discoverable
sys.debugprint("BLE is now ready\r\n")
case PL_BT_EVENT_DISABLED:
end select
end sub