wifi模块 订阅
Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE802.11b.g.n协议栈以及TCP/IP协议栈。传统的硬件设备嵌入Wi-Fi模块可以直接利用Wi-Fi联入互联网,是实现无线智能家居、M2M等物联网应用的重要组成部分。 展开全文
Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE802.11b.g.n协议栈以及TCP/IP协议栈。传统的硬件设备嵌入Wi-Fi模块可以直接利用Wi-Fi联入互联网,是实现无线智能家居、M2M等物联网应用的重要组成部分。
信息
外文名
wifi module
主要功能
实现串口、TTL到无线网络转换
网络协议
IEEE802.11协议栈、TCP/IP协议栈
产品性质
wifi通信的传输转换产品
中文名
wifi模块
应用领域
无线网络
wifi模块主要分类
Wi-Fi模块可分为三类:1,通用Wi-Fi模块,比如手机、笔记本、平板电 脑上的USB或者SDIO接口模块,Wi-Fi协议栈和驱动是在安卓、Windows、IOS的系统里跑的,是需要非常强大的CPU来完成应用;2,路由器方案Wi-Fi模块,典型的是家用路由器,协议和驱动是借助拥有强大Flash和Ram资源的芯片加Linux操作系统;3,嵌入式Wi-Fi模块,32位单片机,内置Wi-Fi驱动和协议,接口为一般的MCU接口如UART等。适合于各类智能家居或智能硬件单品。  很多厂家已经尝试将Wi-Fi模块加入电视、空调等设备中,以搭建无线家居智能系统。实现APP的操控以及和阿里云,京东云,百度云等互联网巨头云端的对接,让家电厂家快速方便的实现自身产品的网络化智能化并和更多的其他电器实现互联互通。 [1] 
收起全文
精华内容
下载资源
问答
  • wifi模块

    2020-09-15 16:01:36
    简单介绍一下wifi模块涉及的终端命令

    前言

    简单介绍一下wifi模块涉及的终端命令

    创建wifi任务

    终端输入命令:

     stack_wifi
    

    连接wifi

    终端输入命令:

     wifi_sta_connect <ssid> <pwd>
    

    示例如下

    wifi_sta_connect LeapFive_SD leapfive
    

    成功连接wifi会打印wifi和memory相关信息

    ping

    测试ping主机

    ping -c 4 172.17.254.20
    

    断开wifi

    终端输入命令:

     wifi_sta_disconnect
    

    成功断开连接后会打印断开连接的log。

    扫描wifi:

    终端输入命令:

     wifi_scan 
    

    扫描成功后会打印scan list,用户可以看到成功搜索的wifi信息。

    开启ap模式:

    终端输入命令:

    wifi_ap_start 
    

    内部的关键api

    wifi_mgmr_ap_start(wifi_interface, ssid_name, hidden_ssid, "12345678", channel);
    

    成功开启后打印ssid,pwd,channel等相关信息,并且可以在手机上搜索到相应名字的wifi。

    关闭ap模式:

    终端输入命令:

    wifi_ap_stop
    

    成功关闭ap模式后手机无法搜索到对应wifi。

    展开全文
  • WIFI模块

    千次阅读 2013-10-28 15:45:20
    什么是WIFI WIFI是一种无线连接技术,可用于PC,PDA,手机等终端。WIFI的目的是改善基于IEEE802.11标准的无线网络产品...简单介绍一下,WIFI模块的基本功能: 开关WIFI 除了在WIFI设置界面可以开关WI
    1. 什么是WIFI

    WIFI是一种无线连接技术,可用于PCPDA手机等终端。WIFI的目的是改善基于IEEE802.11标准的无线网络产品之间的互通性,也就是说WIFI是基于802.11标准的,但WIFI不等同无线网络。


    1. android平台下的WIFI模块

    简单介绍一下,WIFI模块的基本功能:

    1. 开关WIFI

    除了在WIFI设置界面可以开关WIFI,还有其他的入口可以开关,要查看这些开关状态是否一致。还有就是飞行模式对WIFI开关的影响,由于WIFI开和关都有一个时间过程,而飞行模式的开关瞬间完成,所以有时会出现冲突。

    1. 开关新可用网络提醒

    新可用网络的定义是自WIFI模块开启后,从未发现过的,为加密的网络。只有满足了新可用网络的定义,才会有提醒。

    1. 连接断开网络

    连接断开各种不同加密类型的网络(具体类型下文有详解)

    1. 手动添加网络

    需要路由器关闭SIID广播。可手动输入SIID,网络加密类型,密码。对于OPAL手机来说,路由器隐藏了SSID,手动添加的网络是无法连接的。

    1. 搜索网络

    手动点击搜索按钮可以搜索网络,也可以等待WIFI模块自动搜索网络。

    1. 休眠设置

    由于WIFI模块是用电大户,所有为了省电,androidWIFI加了一个休眠策略,可以设置永远不断开,充电时不断开和锁屏时断开。要测试休眠设置是否有效,可以在路由器上PING手机的IPPING通就是连接状态。OPAL手机的休眠策略属于完全失效,现在的情况是无论选哪个都会一直保持连接,锁屏后15分钟再休眠。

    1. 设置静态IP

    Android系统里对IP设置的输入限制很有问题,我一直认为这是弱智的限制。正常IP的范围在0-255之间,androidIP输入的限制是整数0到整数255之间,也就是说0000.000200.001.001这样一个IP都能合法输入。


    1. WIFI模块深入了解一点点

    1. WIFI的基本运行流程

    【初始化】
    1
    SystemServer启动的时候,会生成一个ConnectivityService的实例

    2 ConnectivityService的构造函数会创建WifiService

    3 WifiStateTracker会创建WifiMonitor接收来自底层的事件,WifiServiceWifiMonitor是整个模块的核心。WifiService负责启动关闭wpa_supplicant、启动关闭WifiMonitor监视线程和把命令下发给wpa_supplicant,WifiMonitor则负责从wpa_supplicant接收事件通知。

    【连接AP

    1 WirelessSettings在初始化的时候配置了由WifiEnabler来处理Wifi按钮

    2当用户按下Wifi按钮后, Android会调用WifiEnableronPreferenceChange,再由WifiEnabler调用WifiManagersetWifiEnabled接口函数,通过AIDL,实际调用的是WifiServicesetWifiEnabled函数,WifiService接着向自身发送一条MESSAGE_ENABLE_WIFI消息,在处理该消息的代码中做真正的使能工作:首先装载WIFI内核模块(该模块的位置硬编码为"/system/lib/modules/wlan.ko" ),然后 启 动wpa_supplicant (配置 文 件 硬 编 码 为"/data/misc/wifi/wpa_supplicant.conf")再通过WifiStateTracker来启动WifiMonitor中的监视线程

    3当使能成功后,会广播发送WIFI_STATE_CHANGED_ACTION这个Intent通知外界WIFI已经 成 功 使 能 了 。WifiEnabler创建 的 时 候 就 会 向Android注册 接 收WIFI_STATE_CHANGED_ACTION,因此它会收到该Intent,从而开始扫描

    【查找AP

    1扫描的入口函数是WifiServicestartScan,它其实也就是往wpa_supplicant发送SCAN命令。

    2wpa_supplicant处理完SCAN命令后,它会向控制通道发送事件通知扫描完成,从而wifi_wait_for_event函数会接收到该事件,由此WifiMonitor中的MonitorThread会被执行来出来这个事件。

    3 WifiStateTracker则接着广播发送SCAN_RESULTS_AVAILABLE_ACTION这个Intent

    4 WifiLayer注册了接收SCAN_RESULTS_AVAILABLE_ACTION这个Intent,所以它的相关处理函数handleScanResultsAvailable会被调用,在该函数中,先会去拿到SCAN的结果(最终是往wpa_supplicant发送SCAN_RESULT命令并读取返回值来实现的),List<ScanResult> list = mWifiManager.getScanResults();对每一个扫描返回的AP,WifiLayer会调用WifiSettingsonAccessPointSetChanged函数,从而最终把该AP加到GUI显示列表中。

    【配置AP参数】

    当用户在WifiSettings界面上选择了一个AP,会显示配置AP参数的一个对话框。

    showAccessPointDialog(state, AccessPointDialog.MODE_INFO);

    【连接】

    当用户在AcessPointDialog中选择好加密方式和输入密钥之后,再点击连接按钮,Android就会去连接这个AP

    1 WifiLayer会先检测这个AP是不是之前被配置过,这个是通过向wpa_supplicant发送LIST_NETWORK命令并且比较返回值来实现的,

    //Need WifiConfiguration for the AP

    WifiConfiguration config = findConfiguredNetwork(state);

    如果wpa_supplicant没有这个AP的配置信息,则会向wpa_supplicant发送ADD_NETWORK命令来添加该AP

    2 ADD_NETWORK命令 会 返 回 一 个ID,WifiLayer再用 这 个 返 回 的ID作为参数向wpa_supplicant发送ENABLE_NETWORK命令,从而让wpa_supplicant去连接该AP

    【配置IP地址】

    1wpa_supplicant成功连接上AP之后,它会向控制通道发送事件通知连接上AP,从而wifi_wait_for_event函数会接收到该事件,由此WifiMonitor中的MonitorThread会被执行来出来这个事件

    2 WifiMonitor再调用WifiStateTrackernotifyStateChange,WifiStateTracker则接着会往自身发送EVENT_DHCP_START消息来启动DHCP去获取IP地址

    3然后再广播发送NETWORK_STATE_CHANGED_ACTION这个Intent

    4 WifiLayer注册了接收NETWORK_STATE_CHANGED_ACTION这个Intent,所以它的相关处理函数handleNetworkStateChanged会被调用,DHCP拿到IP地址之后,会再发送EVENT_DHCP_SUCCEEDED消息

    5 WifiLayer处理EVENT_DHCP_SUCCEEDED消息,会再 次 广 播 发 送

    至此为止,整个连接过程完成

    2. wpa_supplicant

    Android平台使用的WiFi控制框架是基于大名鼎鼎的wpa_supplicant,它是一个安全中间件,为各种无线网卡提供统一的安全机制,如下图所示:

    对应上述结构,基于Android的手机中的WiFi控制分为三大组件:
    1
    )客户端程序,包括wpa_cli命令行或java图形界面程序,通过unix本地socket
    wpa_supplicant daemon
    服务通信,发送命令并接收结果;
    2
    wpa_supplicant daemon服务,对应上述中间部分,功能是“上传下达”。所有客户端通过它控制硬件网卡,通过发送字符串命令控制是否扫描AP,提取扫描结果和是否关联AP等操作,同时将驱动的执行状态发送给用户。该服务是设计支持多种无线网卡芯片,因此各个厂商共同提供了一个通用接口给wpa_supplicant调用;
    3
    )网卡驱动;


    在手机内存的/etc/wpa_supplicant.conf中我们可以直接看到WIFI支持的网络类型,每种类型都有例子,比如:

    #Both WPA-PSK and WPA-EAP is accepted. Only CCMP is accepted as pairwise and

    # group cipher.

    #network={

    # ssid="example"

    # bssid=00:11:22:33:44:55

    # proto=WPA RSN

    # key_mgmt=WPA-PSK WPA-EAP

    # pairwise=CCMP

    # group=CCMP

    # psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb

    #}

    不同类型的网络,不同的参数等等,应有尽有。

    1. WIFI模块的LOG了解多一点点

    我们在上面已经知道WIFI的启动过程,在功能运行中也会输出相应的日志信息,下面就来详细了解一下。(请注意,WIFI开启后会更改电池状态等其他状态。关闭WIFI时,android的策略是卸载驱动来省电。如有缺失就是问题。不过下文删去了与WIFI无关的LOG!)

    1.开启WIFI&自动搜索

    E/WifiHW ( 1201): ==JOHN DEBUG==: [WIFI] Load Driver

    加载驱动

    D/SettingsWifiEnabler( 1321): Received wifi state changed from Disabled to Enabling

    接收到广播:WIFI正在开启

    D/WifiService( 1201): ACTION_BATTERY_CHANGED pluggedType: 2

    电池状态改变

    E/WifiHW(1201):==JOHNDEBUG==:moduleaddress:4b938008 filename:/system/lib/modules/dhd.ko args:firmware_path=/system/wlan/broadcom/rtecdc.bin nvram_path=/system/wlan/broadcom/nvram.txt

    WIFI硬件:加载内核模块

    I/wpa_supplicant( 2490): CTRL-EVENT-STATE-CHANGE id=-1 state=2

    wpa_supplicant发出事件通知

    V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=2]

    WifiMonitorwpa_supplicant接收事件通知

    I/wpa_supplicant( 2490): CTRL-EVENT-SCAN-RESULTS Ready

    wpa_supplicant发出事件通知:准备好开始搜索网络了

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-ACTIVE len = 4096

    wpa_supplicant发出事件通知:驱动命令行.主动搜索.LEN

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-ACTIVE len = 0, 11

    wpa_supplicant发出事件通知:驱动命令行.主动搜索.LEN

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-PASSIVE len = 4096

    wpa_supplicant发出事件通知:驱动命令行.被动搜索.LEN

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-PASSIVE len = 0, 12

    wpa_supplicant发出事件通知:驱动命令行.被动搜索.LEN=0.12

    D/SettingsWifiEnabler( 1321): Received wifi state changed from Enabling to Enabled

    接收到广播:WIFI已经开启

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd RSSI len = 4096

    wpa_supplicant发出事件通知:

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd RSSI len = 4, 4

    wpa_supplicant发出事件通知:

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd LINKSPEED len = 4096

    wpa_supplicant发出事件通知:

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd LinkSpeed 54 len = 12, 12

    wpa_supplicant发出事件通知:

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd MACADDR len = 4096

    wpa_supplicant发出事件通知:驱动命令行.MAC地址.LEN

    E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd Macaddr = 44:A4:2D:27:25:BE

    wpa_supplicant发出事件通知:驱动命令行.MAC地址

    E/wpa_supplicant( 2490): len = 28, 28

    wpa_supplicant发出事件通知:

    V/WifiStateTracker( 1201): Connection to supplicant established, state=SCANNING

    WIFI状态跟踪:连接请求确认,状态=搜索

    D/NetworkStateTracker( 1201): setDetailed state, ld =IDLE and new state=SCANNING

    网络状态跟踪:更新显示为搜索状态

    V/WifiStateTracker( 1201): Changing supplicant state: SCANNING ==> INACTIVE

    WIFI状态跟踪:更改请求状态:搜索中->不活动


    2.点击连接&获取状态

    E/WifiHW ( 1201): ==JOHN DEBUG==: [WIFI] Load Driver

    WIFI硬件:加载驱动

    D/SettingsWifiEnabler( 1321): Received wifi state changed from Disabled to Enabling

    收到广播,WIFI状态正在开启

    E/WifiHW(1201):==JOHNDEBUG==:moduleaddress:4b938008 filename:/system/lib/modules/dhd.ko args:firmware_path=/system/wlan/broadcom/rtecdc.bin nvram_path=/system/wlan/broadcom/nvram.txt

    WIFI硬件:加载内核模块

    E/WifiHW ( 1201): ==JOHN DEBUG==: return of insmod : ret = 0, Unknown error: 0

    WIFI硬件:返回装载模块报告:返回指令0,未知错误0

    ……

    I/wpa_supplicant( 2490): Trying to associate with 1c:bd:b9:f6:a7:9f (SSID='LosAngeles' freq=2412 MHz)

    wpa_supplicant发出事件通知:尝试连接,(SSID='LosAngeles'频段=2412 MHz

    V/WifiMonitor( 1201):Event[Trying to associate with 1c:bd:b9:f6:a7:9f (SSID='LosAngeles' freq=2412 MHz)]

    WifiMonitor接收wpa_supplicant的事件

    V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=3]

    WifiMonitor接收事件

    V/WifiStateTracker( 1201): Changing supplicant state: SCANNING ==> ASSOCIATING

    WIFI状态跟踪:更改请求状态:搜索中->匹配中

    D/NetworkStateTracker( 1201): setDetailed state, ld =SCANNING and new state=CONNECTING

    网络状态跟踪:更新显示为正在连接状态

    D/ConnectivityService( 1201): ConnectivityChange for WIFI: CONNECTING/CONNECTING

    连接管理服务:改变WIFI连接状态:正在连接/正在连接

    V/WifiStateTracker( 1201): Changing supplicant state: ASSOCIATING ==> ASSOCIATED

    WIFI状态跟踪:更改请求状态:匹配中->已匹配

    D/NetworkStateTracker( 1201): setDetailed state, ld =CONNECTING and new state=CONNECTING

    网络状态跟踪:更新显示为正在连接状态

    I/wpa_supplicant( 2490): Associated with 1c:bd:b9:f6:a7:9f

    wpa_supplicant发出事件通知:已和1c:bd:b9:f6:a7:9f匹配

    V/WifiMonitor( 1201): Event [Associated with 1c:bd:b9:f6:a7:9f]

    WifiMonitor接收wpa_supplicant的事件

    V/WifiStateTracker( 1201): Changing supplicant state: ASSOCIATED ==> FOUR_WAY_HANDSHAKE

    WIFI状态跟踪:更改请求状态:已匹配->TCP中断连接

    D/NetworkStateTracker( 1201): setDetailed state, ld =CONNECTING and new state=AUTHENTICATING

    网络状态跟踪:更新显示为鉴定中

    D/ConnectivityService( 1201): Dropping ConnectivityChange for WIFI: CONNECTING/AUTHENTICATING

    连接管理服务:抛出WIFI连接状态改变:已连接/鉴定中

    V/WifiStateTracker( 1201): Changing supplicant state: FOUR_WAY_HANDSHAKE ==> GROUP_HANDSHAKE

    WIFI状态跟踪:更改请求状态:TCP中断连接->确认标志位

    D/NetworkStateTracker( 1201): setDetailed state, ld =AUTHENTICATING and new state=AUTHENTICATING

    网络状态跟踪:更新显示为鉴定中

    I/wpa_supplicant( 2490): WPA: Key negotiation completed with 1c:bd:b9:f6:a7:9f [PTK=CCMP GTK=TKIP]

    wpa_supplicant发出事件通知:WPA:1c:bd:b9:f6:a7:9f确定标志位

    I/wpa_supplicant( 2490): CTRL-EVENT-STATE-CHANGE id=0 state=7

    wpa_supplicant发出事件通知:

    I/wpa_supplicant( 2490): CTRL-EVENT-CONNECTED - Connection to 1c:bd:b9:f6:a7:9f completed (auth) [id=0 id_str=]

    wpa_supplicant发出事件通知:连接完成

    V/WifiMonitor( 1201): Event [WPA: Key negotiation completed with 1c:bd:b9:f6:a7:9f [PTK=CCMP GTK=TKIP]]

    WifiMonitor接收wpa_supplicant事件

    V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=0 state=7]

    WifiMonitor接收wpa_supplicant事件

    V/WifiMonitor( 1201): Event [CTRL-EVENT-CONNECTED - Connection to 1c:bd:b9:f6:a7:9f completed (auth) [id=0 id_str=]]

    WifiMonitor接收wpa_supplicant事件

    V/WifiStateTracker( 1201): Changing supplicant state: GROUP_HANDSHAKE ==> COMPLETED

    WIFI状态跟踪:更改请求状态:确认标志位->完成

    V/WifiStateTracker( 1201): New network state is CONNECTED

    WIFI状态跟踪:新网络状态为已连接

    D/NetworkStateTracker( 1201): setDetailed state, ld =AUTHENTICATING and new state=OBTAINING_IPADDR

    网络状态跟踪:更新显示为获取IP地址

    D/ConnectivityService( 1201): Dropping ConnectivityChange for WIFI: CONNECTING/OBTAINING_IPADDR

    连接管理服务:抛出WIFI

    展开全文
  • QCA9331WiFi模块 QCA9331WiFi模块开发pdf,QCA9331WiFi模块 QCA9331WiFi模块开发
  • 51单片机通过WIFI模块ESP8266控制LED灯

    万次阅读 多人点赞 2018-06-16 18:47:40
    手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而...

    写在前面:

    本想将该设计全部开源,无奈理想丰满现实骨感,笔者不得不为五斗米折腰,为了小公主奶粉钱,已将全部源码设计资料和焊接成品挂在了某宝:
    https://item.taobao.com/item.htm?ft=t&id=626621440543

     

    一、系统方案

    手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而实现对LED灯进行开关控制。

     

    设计好的实物是这个样子:

    二、硬件设计

    ESP8266模块作为一个透传模块使用,RXD、TXD分别连接51单片机的TXD和RXD,VCC和CH_PD管脚接3.3V电压,GND接地,只需要连接这些管脚,ESP8266模块就可以正常工作了。在单片机P2口上连接了三个5mm的LED灯,分别是红黄蓝三种颜色,我们的目的是通过手机APP上的开关控制着三个LED灯的亮灭。

    ESP8266实物管脚图

    三、单片机软件设计

    硬件的连接不复杂,接下来主要是单片机和手机APP代码的编写。

    单片机代码主要是串口初始化、串口中断和ESP8266的初始化。首先是串口初始化:

            TMOD=0x20;		//定时器1工作在方式2
    	TH1 = 0xfd;		//波特率9600
    	TL1 = 0xfd;
    	SM0=0;                  //串口工作在方式1
    	SM1=1;
    	EA = 1;			//开总中断
    	REN = 1;		//使能串口
    	TR1 = 1;		//定时器1开始计时

    然后是ESP8266初始化:

            delayms(1000);                        //延时
    	sendString("AT+CWMODE=2\r\n");        //设置ESP8266工作在AP模式下
    	delayms(1000);	
    	sendString("AT+CIPMUX=1\r\n");        //允许多连接
    	delayms(1000);	
    	sendString("AT+CIPSERVER=1\r\n");     //建立服务器
    	delayms(1000);	
    	ES = 1;				      //esp8266初始化之后开串口中断

    贴上51单片机负责串口发送的两个函数:

    //发送一个字节
    void sendChar(uchar a)
    {
    	SBUF = a;
    	while(TI==0);
    	TI=0;
    	
    }
    
    //发送字符串
    void sendString(uchar *s)
    {
    	while(*s!='\0')
    	{
    		sendChar(*s);
    		s++;
    	}
    		
    }

    在串口中断中处理接收到的数据:

    1:打开红色灯    2:关闭红色灯

    3:打开黄色灯    4:关闭黄色灯

    5:打开蓝色灯    6:关闭蓝色灯

    esp8266在收到数据并转发给单片机时的数据格式:+IPD,<client号>,<收到的字符长度>:收到的字符,比如+IPD,0,5:hello,其中+PID是固定的;0代表的是TCP客户端编号,esp8266最多支持5个客户端同时连接,也就是说客户端编号是0到4,在本设计中由于只有一个客户端与esp8266相连,所以客户端编号是0;5代表收到的字符长度;hello是收到的字符。在本例中esp8266发送给单片机的数据是+IPD,0,1:1,我们把接收到的字符串缓存到字符数组中,所以在处理收到的数据逻辑中,首先判断是否是以'+'开始的,否则视作无效数据,然后判断数组中的第十个数据,因为第十个数据才是上位机发送过来的数据。

    void uart() interrupt 4
    {
        if(RI == 1)   
        {
            RI = 0;     //清除串口接收标志位
    	receiveTable[i]=SBUF;
    	if(receiveTable[0]=='+')
    	{
    		i++;
    	}
    	else
    	{
    		i=0;
    	}
    	if(i==10)
    	{
    		i=0;
    		switch(receiveTable[9])
    		{
    			case '1':
    				RedLED=0;
    				break;
    			case '2':
    				RedLED=1;
    				break;
    			case '3':
    				YellowLED=0;
    				break;
    			case '4':
    				YellowLED=1;
    				break;
    			case '5':
    				BlueLED=0;
    				break;
    			case '6':
    				BlueLED=1;
    				break;
    		}
    	}
        
      }
    }

     

    四、Android APP软件设计

     

    Android APP是借助Android Studio来开发的,界面比较简单,通过编辑框输入esp8266的IP地址和端口号,esp8266默认的IP地址是192.168.4.1,端口号是333,这些都可以通过AT指令进行修改。布局页面的xml代码我们就不贴了,熟悉Android开发的读者很快就能根据截图编写出来,放上一个APP界面的截图:

    我们主要看一下逻辑代码部分:

    首先是控件的初始化和按钮点击事件回调的绑定

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mBtnConnect = (Button) findViewById(R.id.btn_connect);
            mEtIP = (EditText) findViewById(R.id.et_ip);
            mEtPort = (EditText) findViewById(R.id.et_port);
            mBtnRedOn = (Button) findViewById(R.id.btn_red_on);
            mBtnRedOff = (Button) findViewById(R.id.btn_red_off);
            mBtnYellowOn = (Button) findViewById(R.id.btn_yellow_on);
            mBtnYellowOff = (Button) findViewById(R.id.btn_yellow_off);
            mBtnBlueOn = (Button) findViewById(R.id.btn_blue_on);
            mBtnBlueOff = (Button) findViewById(R.id.btn_blue_off);
            mBtnConnect.setOnClickListener(this);
            mBtnRedOn.setOnClickListener(this);
            mBtnRedOff.setOnClickListener(this);
            mBtnYellowOn.setOnClickListener(this);
            mBtnYellowOff.setOnClickListener(this);
            mBtnBlueOn.setOnClickListener(this);
            mBtnBlueOff.setOnClickListener(this);
    
        }

    按钮的点击回调方法:

        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_connect:
                    //连接
                    if (mSocket == null || !mSocket.isConnected()) {
                        String ip = mEtIP.getText().toString();
                        int port = Integer.valueOf(mEtPort.getText().toString());
                        mConnectThread = new ConnectThread(ip, port);
                        mConnectThread.start();
                    }
                    if (mSocket != null && mSocket.isConnected()) {
                        try {
                            mSocket.close();
                            mBtnConnect.setText("连接");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
    
                    break;
                case R.id.btn_red_on:         //开红灯
                    if (out != null) {
                        out.print("1");
                        out.flush();
                    }
                    break;
                case R.id.btn_red_off:        //关红灯
                    if (out != null) {
                        out.print("2");
                        out.flush();
                    }
                    break;
                case R.id.btn_yellow_on:
                    if (out != null) {
                        out.print("3");
                        out.flush();
                    }
                    break;
                case R.id.btn_yellow_off:
                    if (out != null) {
                        out.print("4");
                        out.flush();
                    }
                    break;
                case R.id.btn_blue_on:
                    if (out != null) {
                        out.print("5");
                        out.flush();
                    }
                    break;
                case R.id.btn_blue_off:
                    if (out != null) {
                        out.print("6");
                        out.flush();
                    }
                    break;
            }
        }
     

    负责连接esp8266的线程:

    private class ConnectThread extends Thread {
            private String ip;
            private int port;
    
            public ConnectThread(String ip, int port) {
                this.ip = ip;
                this.port = port;
            }
    
            @Override
            public void run() {
                try {
                    mSocket = new Socket(ip, port);
                    out = new PrintStream(mSocket.getOutputStream());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mBtnConnect.setText("断开");
                        }
                    });
                    new HeartBeatThread().start();
                } catch (IOException e) {
                    e.printStackTrace();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        }

    本文完!

     

    展开全文
  • AMPAK正基WIFI模块定频软件-适用AP系列所有WIFI模块,AP6181,AP6212,AP6236,AP6255,AP6256等WIFI模组都可适用,世联芯科技长期供应AMPAK正基AP全系列模组.提供技术支持!
  • WIFI模块

    2018-11-26 00:29:07
    WIFI模块库,用于台产的24L01 WIFI模块库,用于台产的24L01
  • WIFI模块源码

    2018-11-08 15:41:15
    wifi模块控制源码
  • 嵌入式WIFI模块 串口转WIFI模块 操作演示教程 嵌入式WIFI模块 串口转WIFI模块 操作演示教程
  •  其中网卡类WiFi模块通信接口、通信信道、综合功能可以大体分成八大系列(USB接口单频单通道WiFi模块、USB接口单通道多功能高性能WiFi模块、USB接口双通道单/双频WiFi模块、USB接口双通道双频高性能多功能一体WiFi...
        前面有把WiFi模块分成网卡类和AP类两大类进行分析。
        其中网卡类WiFi模块通信接口、通信信道、综合功能可以大体分成八大系列(USB接口单频单通道WiFi模块、USB接口单通道多功能高性能WiFi模块、USB接口双通道单/双频WiFi模块、USB接口双通道双频高性能多功能一体WiFi模块、SDIO接口单频单通道WiFi模块、SDIO接口单通道多功能高性能WiFi模块、SDIO接口双通道单/双频高性能多功能WiFi模块、PCIe接口无线网卡式WiFi模块);AP类的WiFi模块可以分为嵌入式AP模块(核心板方式,只引出接口pin脚)和AP主板(也就是不带壳子和天线的成品)
        这样分类比较繁多,对于选择应用估计会比较迷糊,接下来针对网卡类WiFi模块从功能上分成以下(单频WiFi模块、双频WiFi模块、WiFi蓝牙二合一模块)三大部分来进行剖析,会显得更加直观!
      
    WiFi模块种类一:单WiFi功能单频WiFi模块
        单频也就是工作在ISM2.4频段下,目前没有单独在ISM5G的(除了大功率版本只能选择单频放大);
        频率范围:ISM2.4G(2.400GHz~2.497GHz);
        符合IEEE 802.11b/g/n标准;
        其它只要考虑芯片的方案、模块的封装尺寸、通信通道数量(1T1R、2T2R)、通信接口(USB、SDIO、PCIe)、供电电压、天线的处理方式了!
        1.1:USB接口1T1R单通道的方案主要有:RTL8188系列、MT7601UN、AR9271、RT3070;尺寸封装以12.9*12.2mm/LGA-6和27*15mm/LGA-6为主;
        1.2:USB接口2T2R双通道的方案主要有:RTL8192EU、RTL8192CU、AR1021G、MT7603UN;尺寸封装以27*15mm/LGA-6为主;
        2.1:SDIO接口1T1R单通道的方案主要有:RTL8189系列、AR6302、88W8801、BCM43362、ESP8089、SV6030P、SP6051P;尺寸封装12*12mm/LGA-44和13.5*13/LGA-14以及14*12.5/LGA13为主;
        2.2:SDIO接口2T2R双通道的方案主要有:RTL8192ES;尺寸封装以15*13mm/LGA-50为主;
        3.0:PCIe接口的方案主要有:RTL8188EE(1T1R)、RTL8192EE/AR9287/AR9283(2T2R);尺寸封装以30*26.7/PCIe-52为主;
        通过以下列表,一看就比较清楚!

    下期将探讨WiFi模块种类二:单WiFi功能双频WiFi模块
    展开全文
  • 一、WiFi模块是什么?有什么作用?WiFi模块属于物理网络传输层,具有内置的无线网络协议IEEE802.11b.gn协议栈和TCP / IP协议栈。串行端口或TTL级别是WiFi无线网络通信标准。许多可以连接到网络的传统设备都被嵌入...
  • esp8266 WiFi模块资料(WiFi模块、AT指令样例+esp8266等)打包下载
  • 之前写的:ESP8266 WIFI模块学习之路(3)是WIFI模块向单片机发送信息,我们绝不能满足于仅仅是给单片机下发数据,我们还想自己接受数据,只有这样互相通信才是真正的物联网技术。因此,我就在研究如何实现WIFI模块...
  • WIFI模块说明

    2018-11-11 22:47:42
    WIFI模块,可同时具体STA和AP模式,STA模式可与客户端通信,控制单片机;AP模式为热点模式,可与上位机通信;可单独使用或一起使用。
  • WIFI模块相关

    2020-12-07 20:22:53
    第一种方法:wifi模块工作在AP模式,智能终端(手机、平板)直接接入wifi模块提供的网络,在同一个热点网络实现无线控制。(如图一左边) 但是由于wifi模块工作AP模式也就是热点模式下,它接入的智能设备端有限,我...
  • 1,通用串口wifi模块 2,ESP8266系列模组 3,特性 4,选型
  • WIFI模块与串口通信

    2018-09-09 20:43:00
    WIFI与串口之间的通信,WiFi模块.WIFI与串口之间的通信,WiFi模块.
  • SKYLAB面向物联网市场中的智慧物流,智能交通,智慧安防,智慧能源...USB接口WiFi模块,AP/Router无线路由WiFi模块及远距离图传WiFi模块,高清视频传输WiFi模块及BLE/4.2/5.0低功耗蓝牙模块等嵌入式无线WiFi模块产品。
  • WIFI模块.zip

    2020-03-27 16:56:04
    ESP8266 WIFI模块用户手册,详细使用教程。 ESP8266 是一个完整且自成体系的 WiFi 网络解决方案,能够独立运行,也可以作为 slave 搭载于其他 Host 运行。
  • 串口WIFI模块

    2011-12-12 12:13:51
    串口WIFI模块 WIFI模块 TTL电平转无线WIFI,九汉科技 WIFI模块。让串口设备无线连接到网络上,
  • wifi模块软件

    2014-06-13 12:08:19
    WIFI模块网络搜索软件,用于单片机wifi功能开发
  • 51单片机连接ESP8266串口WiFi模块

    万次阅读 多人点赞 2017-01-18 15:53:57
    3.3V (5V连接时间过长可能会烧坏WiFi模块) GND GND CH_PD 3.3V GPIO0 GND UTXD TXD URXD RXD 烧录固件 打开烧录软件,选择配置选项卡,点击第二栏的小齿轮图标 - 加载固件地址 点击其他...
  • 前面两节介绍了单WiFi功能的单/双频WiFi模块,有时候由于应用设计需要有蓝牙功能,但是如果wifi和蓝牙功能独立分开设计,需要占用比较多的设计空间,在高集成度的设计中,就有了蓝牙和WiFi功能一体的模块,方便集成...
  • SKW93A是一款集成MT7628A,MT7610E双芯片的ac AP/Router双频WiFi模块,具备高性能,高集成的无线AP解决方案模块!SKW93A内置580M双内核,对于消费电子设备,该模块仅需要外部3.3V电源。 SKW93A符合802.11a/b/g/n/ac...
  • 双频就是工作频段在ISM2.4G和ISM5G,基本的应用都是不能同时双频率;针对ISM5G频段,有IEEE 802.11a和IEEE 802.11ac标准区别,11ac标准的单通道带款可高达433Mbps,而11a单通道仍然是150Mbps... 既然是双频WiFi模块,...
  • WiFi模块主要有网卡类和AP类两大类。  网卡类WiFi模块通信接口、通信信道、综合功能可以大体分成八大类;AP类的WiFi模块可以分为核心板式AP类WiFi模块(核心板方式,只引出接口pin脚)和主板式AP类WiFi模块(也就是不...
  • 单片机控制WIFI模块

    2018-12-05 19:50:24
    本人工作实践中写的源代码,注释比较仔细,用于单片机控制WIFI模块的通信

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,423
精华内容 2,569
关键字:

wifi模块