Запуск интерфейса Wi-Fi

Проще всего запустить интерфейс Wi-Fi, вызвав функцию wln_start() из библиотеки WLN. Это избавит вас от массы работы, честное слово!

Если вы не можете или не хотите использовать библиотеку, для запуска интерфейса Wi-Fi нужно выполнить следующие шаги:

Ниже приведён упрощённый пример кода, демонстрирующий этот процесс. Обычно его вызывают из обработчика события on_sys_init, но на самом деле вызвать его можно из любого места приложения. Код назван «упрощённым», потому что в нём нет проверки ошибок.

Этот код работает и с GA1000, и с WA2000, на всех платформах, поддерживающих одно из этих устройств или оба:

'BRINGING UP THE WI-FI MODULE (SIMPLIFIED)
#If PLATFORM_ID=EM500W
   #define WLN_RESET_MODE 1 'reset is controlled by the combination of CS and CLK
   'there is no need to map CS, DI, DO, and CLK lines because they are fixed
#elif PLATFORM_ID=EM1206W
   #define WLN_RESET_MODE 0 'there is a dedicated reset line
   #define WLN_RST PL_IO_NUM_11
   #define WLN_CS PL_IO_NUM_15
   #define WLN_DI PL_IO_NUM_12
   #define WLN_DO PL_IO_NUM_13
   #define WLN_CLK PL_IO_NUM_14
#else
   #define WLN_RESET_MODE 0 'there is a dedicated reset line
   #define WLN_RST PL_IO_NUM_51
   #define WLN_CS PL_IO_NUM_49
   #define WLN_DI PL_IO_NUM_52
   #define WLN_DO PL_IO_NUM_50
   #define WLN_CLK PL_IO_NUM_53
#endif
'----------------------------------------------------------------------------
sub on_sys_init
   '----- configure interface lines -----
   '(on platforms with fixed mapping this will have no effect)
   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
   '----- reset Wi-Fi module -----
   #If WLN_RESET_MODE
      'reset is controlled by the combination of CS and CLK
      io.lineset(wln.csmap,HIGH)
      io.lineset(wln.clkmap,LOW)
      io.lineset(wln.clkmap,HIGH)
   #Else
      'there is a dedicated reset line
      io.num=WLN_RST
      io.state=LOW
         'The WA2000 requires a longer reset pulse (1ms), and the GA1000 will not mind it
         '32-bit platforms offers a convenient sys.timercountms method
         'Since the WA2000 only works on 32-bit platforms, let's write the code like this:
         #if PLATFORM_TYPE_32
            sys.timercountms=0
            while sys.timercountms<1
            wend
         #endif
      io.state=HIGH
   #endif
   'in case we called wln_init() after it has already been up and running
   While wln.enabled=YES
   Wend
   '----- set the domain -----
   wln.domain=PL_WLN_DOMAIN_FCC 'for illustrative purpose only, this is the default value
   '----- set allowed bands -----
   wln.band=WIFI_PHY_11ABGN_MIXED 'for illustrative purpose only, this is the default value
   '----- allocate the buffer -----
   wln.buffrq(5)
   sys.buffalloc
   '----- set MAC address (optional) -----
   wln.mac="0.100.110.120.130.140" '
   '----- detect the module type
   dim module_type as pl_wln_module_types=wln.getmoduletype
   '----- boot up the module -----
   if module_type=PL_WLN_MODULE_TYPE_GA1000 then
      romfile.open("ga1000fw.bin")
      wln.boot(romfile.offset) 'supply the pointer to the GA1000 firmware file
   else
      wln.boot(0) 'no need to upload the WA2000 firmware every time
   end if
   '----- setup the IP, gateway, netmask -----
   wln.ip="192.168.1.86" 'can be delegated to our DHCP library
   wln.gatewayip="192.168.1.1" 'optional
   wln.netmask="255.255.255.0" 'optional
end sub
Исходный материал Tibbo обновлён 22 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке