Запуск и включение интерфейса 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
Исходный материал Tibbo обновлён 27 июля 2022Оригинал на docs.tibbo.com · Сообщить об ошибке