大家好,我是 杰哥编程
下面是我的gitee仓库,欢迎大家关注↓
gitee源码仓库链接跳转
1.出厂默认启动AP模式,让无线网卡(WIFI-wlan0)工作在AP热点模式
1.1热点的名字是什么?热点的密码是什么?热点的加密方式是什么?这些需要通过编写配置文件搞定。
1.1.1打开/etc目录下的hostapd.conf文件,如果你的板子没有这个文件那就创建一个名为”hostapd.conf“的文件放到/etc目录下。
1.1.2有了/etc/hostapd.conf文件,vi打开这个文件,无论里面有没有东西,删干净,把下面这段配置脚本复制粘贴进去。
interface=wlan0 #指定接入点所使用的无线网卡接口,板子上面只有一个WiFi,使用指定接口为wlan0
ssid=clc_handsome #指定热点的名称(Service Set Identifier)
channel=6 #指定热点使用的信道号
hw_mode=g #指定热点所支持的无线标准。在此,使用的是802.11g标准
ignore_broadcast_ssid=0 #指定是否隐藏无线网络热点的名称。0 表示不隐藏,1 表示隐藏
auth_algs=1 #指定接入点所支持的身份验证算法。在此,使用的是Open System认证
wpa=2 #指定接入点使用的Wi-Fi Protected Access(WPA)版本。在此示例中,使用的是WPA2
wpa_passphrase=12345678 #设置热点的密码
wpa_key_mgmt=WPA-PSK #指定接入点使用的密钥管理类型。在此示例中,使用的是预共享密钥(Pre-Shared Key)方式
wpa_pairwise=TKIP #指定加密算法用于保护数据传输。在此示例中,使用的是临时密钥完整性协议(Temporal Key Integrity Protocol)
rsn_pairwise=CCMP #指定在WPA2模式下使用的加密算法。在此示例中,使用的是AES-CCMP(Advanced Encryption Standard - Counter Mode with Cipher Block Chaining Message Authentication Code Protocol)
1.2通过执行下面的指令,得到将所有网络工具程序的进程ID,并通过kill -9 xxx将这些网络工具程序进程全部杀死结束
ps -aux | grep hostapd
ps -aux | grep udhcpc
ps -aux | grep udhcpd
ps -aux | grep wpa_supplicant
1.3配置udhcpd,让WiFi网卡在热点状态下能够为接入的设备分配IP地址
1.3.1补充网络常识:每台设备都有全球唯一的MAC地址,这是设备网络属性的物理属性。那在网络编程里面,所有网络数据都是到离你最近的基站或者路由器,然后由路由器或者基站转发给你的设备。这些动作都是基于IP协议实现的,如果没有IP地址,就相当没有门牌号,那路由器或者基站这个快递员就无法将数据包裹派发到你的设备。所以一旦设备接入到路由器或者基站,那么路由器或者基站就会为你的设备分配门牌号,与就是IP地址。在分配完IP地址过后,以后到达基站或者路由器的每个数据包裹才能被正确派送到设备。回过头来看。基站或者路由器都是计算机,计算机上面没有一个硬件模块能完成分配IP地址的任务,分配IP地址的功能只能让软件程序实现,因为硬件只能管连接接收,至于怎么分配是软件的事情;udhcpd就是一个具有分配IP地址功能的软件。hostapd这个软件工具只能让板子上面的WiFi模块成为AP(你可以理解为AP就是把WiFi模块当路由器)并且接收其他设备的连接,但是接进来的设备必须有IP地址,板子才知道把数据转发给谁吧?udhcpd就是在WiFi模块成为热点路由器后,为每个接入设备分配IP地址的软件;这就是udhcpd软件的作用。
1.3.2编写/etc/udhcpd.conf文件的内容
lease_file /var/lib/misc/udhcpd.leases # 租约文件路径,新建租约文件为空文件即可
start 192.168.0.20 # 分配的 IP 地址起始范围
end 192.168.0.254 # 分配的 IP 地址结束范围
interface wlan0 # DHCP 服务器绑定的网络接口名称
1.4逐步运行以下命令,让板子成为路由器热点等待手机接入
::“#”号后面内容为注释解释语句,只需运行“#”号前面的命令即可
sudo ifconfig wlan0 down
#将 wlan0 网卡禁用,即关闭无线接口
sudo ifconfig wlan0 up
#将 wlan0 网卡启用,即打开无线接口
sudo ifconfig wlan0 ud > /dev/null 2>&1
#将 wlan0 网卡设定为混杂模式,它可以接收并处理所有经过该网卡的数据包,而不仅仅是目标地址是自己的数据包。> /dev/null 2>&1 将输出重定向到空设备,即不显示任何输出
sudo ifconfig wlan0 192.168.0.1 netmask 255.255.255.0 > /dev/null 2>&1
#配置 wlan0 的 IP 地址和子网掩码。具体地,将 wlan0 网卡的 IP 地址设置为 192.168.0.1,子网掩码设置为 255.255.255.0。同样,> /dev/null 2>&1 将输出重定向到空设备,即不显示任何输出。
sudo udhcpd -fS /etc/udhcpd.conf &
#启动一个 DHCP 服务器,使用 /etc/udhcpd.conf 配置文件进行配置。-fS 参数分别表示以前台运行模式启动,并显示详细的信息。最后的 & 表示将该命令放入后台运行。
sudo hostapd -B -d /etc/hostapd.conf
#启动 Hostapd 服务,使用 /etc/hostapd.conf 配置文件进行配置。-B 参数表示以守护进程模式启动,-d 参数表示启用详细的调试信息。
1.5总结
1.5.1我们使用了hostapd工具让板子成为AP热点,让手机能接入到板子来,但是想要让手机和板子对话,还需要给接进来的手机分配IP地址
1.5.2我们使用了udhcpd工具让板子能够为接进来的每台设备分配IP地址
1.5.3手机成功接入板子这个AP热点了,而且有了IP地址能够进行对话,接下来就到刺激的网络TCP-socket套接字编程了
1.6操作附图
1.6.1创建或修改/etc/hostapd.conf文件,hostapd工具会读取这个配置文件,然后按照文件里面设定的参数来工作,等待连接
1.6.2创建或修改/etc/udhcpd.conf文件,udhcpd工具会读取这个配置文件,然后按照文件里面设定来为每个接入wlan0模块的设备分配IP地址
1.6.3把上面两个工具的配置文件编写好以后,按照1.2的命令结束各个网络工具进程,再依次执行1.4的命令,然后打开手机,看到手机已经发现了板子这个热点
1.6.4输入密码连接WiFi,查看WiFi详情,可以看到手机成功接入了板子的热点,同时板子为接入的手机分配了IP地址
1.7网络编程与手机通信获取WiFi名字和密码,接入互联网
1.7.1编写TCP服务器代码,编译放到板子上面运行,手机的app通过TCP连接接入板子上面的TCP服务器,有了TCP连接,手机就可以发送数据给板子上面的服务器程序,手机app把家里的WiFi名字和密码以TCP连接发送到板子的服务器程序,板子的服务器程序拿到手机app发过来的WiFi名字和密码就退出热点AP模式,然后通过system函数执行拼接好的联网命令,从而通过家庭的路由器接入因特网。
1.7.2吹水时间:这是一个套路,出厂状态的全新空白设备,假如你是做摄像头的,你不可能把摄像头卖给客户然后送给客户串口线和Xshell软件,让客户拿到摄像头的时候通过Xshell终端串口连接摄像头,然后敲联网命令去连接WiFi;这种行为很6;所以我们必须编写一个开机运行的软件,来执行1.1~1.4的每步操作。这样客户拿到摄像头,通电完成摄像头就处于AP热点了。这个时候配合手机APP接入摄像头热点,把光猫的WiFi名称和密码发给板子,板子执行联网;在客户角度只要点点手机APP按钮就可以配网...
1.7.3AP热点阶段通过板子和手机APP连接获取家庭路由器的名字和密码的任务已经完成,接下来就是拿到家庭路由器的名字和密码该怎么接入因特网了。下期继续分享
2.关于我们
其实上面这个操作步骤就是真实开发中用到的套路,企业里面就是这么干的,大体一样就是会有微小差异,希望我的博客能够帮到你;如果你想得到更多免费的嵌入式学习资料,点击进入主页,按提示操作领取嵌入式学习独家资源。