示例1 ConnectNoEncryption

来源:互联网 发布:bugfree windows 编辑:程序博客网 时间:2024/05/18 10:19
 #include <WiFi.h>

char ssid[] = "yourNetwork";     // 千万记住把你的wifi网络改成你的wifi名字,并且不要加密
int status = WL_IDLE_STATUS;     // 把板子wifi当前设置为空状态,即还没连到你的wifi网络

void setup() {
  //初始化串口,等待端口打开:
  Serial.begin(9600); 
  while (!Serial) {
    ; // 等待串口连接,这一步只对Leonardo有用,其他核心板不需要
  }
  
  // 检查你的wifi扩展板是不是连到了核心板上,如果没连,程序就停到这里不动了
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present"); 
    // 程序就是停在这里,死循环
    while(true);
  } 
  
 // 如果上一步检查连接通过了,这一步就要检查你的wifi扩展板是不是成功连到了wifi网络,注意是没有加密的网络
  while ( status != WL_CONNECTED) { 
    Serial.print("Attempting to connect to open SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid);

    // 等个10秒,再看看能不能连上,不能连上的话就永远悲催地在这个循环尝试连接
    delay(10000);
  }
   
  // 你的扩展板现在连到了wifi网络,需要打印些信息证明确实连上了
  Serial.print("You're connected to the network");
  printCurrentNet();
  printWifiData();
}

// 无限循环,每隔10秒,检查一遍你的扩展板还是不是连到了wifi网络
void loop() {
  delay(10000);
  printCurrentNet();
}

void printWifiData() {
  // 打印输出wifi扩展板的IP地址:
  IPAddress ip = WiFi.localIP();
    Serial.print("IP Address: ");
  Serial.println(ip);
  Serial.println(ip);
  
  // 打印输出你的MAC地址:
  byte mac[6];  // 定义六字节的数组用来存放MAC地址
  WiFi.macAddress(mac);
  Serial.print("MAC address: ");
  Serial.print(mac[5],HEX);
  Serial.print(":");
  Serial.print(mac[4],HEX);
  Serial.print(":");
  Serial.print(mac[3],HEX);
  Serial.print(":");
  Serial.print(mac[2],HEX);
  Serial.print(":");
  Serial.print(mac[1],HEX);
  Serial.print(":");
  Serial.println(mac[0],HEX);
  
  // 打印输出你的子网掩码:
  IPAddress subnet = WiFi.subnetMask();
  Serial.print("NetMask: ");
  Serial.println(subnet);

  // 打印输出你的网关地址:
  IPAddress gateway = WiFi.gatewayIP();
  Serial.print("Gateway: ");
  Serial.println(gateway);
}

void printCurrentNet() {
  // 打印输出你连接的wifi网络名称:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // 打印输出你连接的路由器的MAC地址:
  byte bssid[6];
  WiFi.BSSID(bssid);    
  Serial.print("BSSID: ");
  Serial.print(bssid[5],HEX);
  Serial.print(":");
  Serial.print(bssid[4],HEX);
  Serial.print(":");
  Serial.print(bssid[3],HEX);
  Serial.print(":");
  Serial.print(bssid[2],HEX);
  Serial.print(":");
  Serial.print(bssid[1],HEX);
  Serial.print(":");
  Serial.println(bssid[0],HEX);

  // 打印输出接收信号的强度:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.println(rssi);

  // 打印输出当前网络的加密类型:
  byte encryption = WiFi.encryptionType();
  Serial.print("Encryption Type:");
  Serial.println(encryption,HEX);
}
库函数说明

WiFi.status()
函数用来返回连接状态,它可以返回的状态有以下几种:
    WL_NO_SHIELD = 255,// 扩展板没连到核心板上,本节用到的状态
        WL_IDLE_STATUS = 0,// 空状态,一般默认设置成这个状态
        WL_NO_SSID_AVAIL,// 当前输入的wifi名称是错的
        WL_SCAN_COMPLETED,// 扫描附近的wifi完成
        WL_CONNECTED,// 成功连到wifi,本节用到的状态
        WL_CONNECT_FAILED,// 连到wifi失败了
        WL_CONNECTION_LOST,// wifi掉线了
        WL_DISCONNECTED// wifi没连上
常用的是黑色加粗的状态,其他的状态可根据需要灵活使用

IPAddress ip = WiFi.localIP()
这个函数用来获取WiFi扩展板的本地IP地址,注意要获得IP地址,都需要用IPAddress这个数据类型来定义。
 WiFi.macAddress(mac)
这个函数用来获取你WiFi扩展板的MAC地址,存放到mac数组中。

IPAddress subnet = WiFi.subnetMask()
这个函数用来获取WiFi扩展板的子网掩码,存放到IPAddress类型的变量中

子网很好理解,就是一个大网络包含下的各个子网络,掩码字面意思就是屏蔽,子网掩码就是屏蔽掉右边1格子网的地址,只剩下左边3格主网的地址,屏蔽之后如果发现两台电脑左边3格都一样,那说明大家在一个网段,可以互相访问

IP地址中的前3个字节表示网络号,后一个字节既表明子网号,又说明主机号,还说明两个IP地址是否属于同一个网段。
如果属于同一网络区间,这两个地址间的信息交换就不通过路由器。如果不属同一网络区间,也就是子网号不同,两个地址的信息交换就要通过路由器进行。

IPAddress gateway = WiFi.gatewayIP()
这个函数用来获取网关的IP地址,并存放到IPAddress类型的变量中。
网关说白了就是你的路由器,专业一点的解释是两个不在同一网段的网络相互通信的关口,它本质上也是一个IP地址,实现数据包的转发功能,所以很简单,网关地址就是路由器的IP地址,一般都是192.168.1.1,如果你设置过路由器密码,就肯定知道这个地址,如果没设置过,那火速去试一把。

WiFi.SSID()
这个函数用来获取你的WiFi扩展板当前连接到的WiFi名称。
SSID一听好专业,好高大上啊,度娘一下才知道SSID不就是wifi的网络名称嘛,见下图,是不是很熟悉。
SSID是Service Set Identifier的缩写,译为:服务集标识。


WiFi.BSSID(bssid)
这个函数用来获取你路由器的MAC地址
它返回的是有6个元素的字节数组,也就是有48位比特,换算成十六进制就是有12位。

或者直接把你的路由器翻过来就可以看到路由器的MAC地址,如下图:

WiFi.RSSI()
这个函数用来获取你无线路由器的信号强度,RSSI是Received Signal Strength Indication的缩写,单位是dBm

WiFi.encryptionType()
这个函数用来获取当前网络的加密类型
它的返回值有下面几种:
TKIP (WPA) = 2
WEP = 5
CCMP (WPA) = 4
NONE = 7
AUTO = 8

名词解释:wifi加密类型
wifi加密类型常见有四种:
WEP
WPA-PSK [TKIP]
WPA2-PSK [AES]
WPA-PSK + WPA2-PSK
在你设置WiFi密码的时候肯定纠结过选哪种加密方式,我也没啥好建议,只要不用WEP加密就好了


Serial.print()
Serial.println()
这两个函数的功能和区别不用多说了吧,后者就是比前者增加了换行功能,其实我一直认为那个不是println,而是print/n,只不过特殊字符不能放到命名函数,所以就直接写成了ln

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 踏板摩托声音大怎么办 法语面签听不懂怎么办 常州出生证丢了怎么办 分公司就俩个人怎么办 分公司就三个人怎么办 转账支票作废后怎么办 干组织不是党员怎么办 宾馆客人逃房费怎么办 cad图太大打不开怎么办 cad文字输入不了怎么办 word打不了汉字怎么办 电脑浏览器卡顿怎么办 文档里输入不了怎么办 淘宝退款卖家不处理怎么办 抵押合同丢了怎么办 抵押合同丢失了怎么办 发票货物名称多怎么办 发票上少打一个字怎么办 发票名称带星号怎么办 小贷太多还不上怎么办 生日当天买保险怎么办 我挪用公司货款怎么办 车辆改名字保险怎么办 工伤报案周六日怎么办 五菱宏光s1门下沉怎么办 新手机版本更新怎么办 戴尔电脑开机黑屏怎么办 淘宝退货不发货怎么办 铝被酸腐蚀怎么办 新娘头饰氧化了怎么办 合金饰品变黑了怎么办 麻醉机fico2升高怎么办 快递被恶意投诉怎么办 顺风快递收件人拒收怎么办 手机联系人没了怎么办 收件人号码错了怎么办 收件人写错了怎么办 快递联系不到收件人怎么办 小孩烫伤有水泡怎么办 被烫伤的疤痕怎么办 微店别人下单后怎么办