宜城龙山 发表于 2024-2-25 16:53

【安信可BW16-Kit开发板】WifiWebClient应用

<div class='showpostmsg'><p align="center"><b>【安信可BW16-Kit开发板】WifiWebClient应用</b></p>

<p >&nbsp;</p>

<p >随着物联网的兴起,在许多项目中,我们需要使用Arduino开发板来实现与互联网的无线连接。使用WiFi模块,我们可以轻松实现物联网应用,将传感器数据发送到云平台或者通过云平台控制设备。安信可BW16-Kit具有Ble、Wifi功能。本文将介绍一下在Arduino下使用BW16-Kit开发板连接WEB客户端方法。</p>

<p ><b>一、安信可BW16-Kit介绍</b></p>

<p >安信可科技BW16是双频 Wi-Fi+蓝牙SoC模组,支持双频(2.4GHz或5GHz)WLAN 和低功耗蓝牙5.0 ,集成了ARM V8兼容Cortex-M4F)高性能MCU、ARM V8M(兼容 Cortex-M0)低功耗 MCU、WLAN(802.11 a/b/g/n)、MAC,蓝牙基带和RF基带,并提供可配置的GPIO口,用于不同外围设备的控制。安信可BW16 集成了内部存储器,支持简单的应用程序开发,可实现完整的Wi-Fi和BT5.0协议功能。</p>

<p >【特性】</p>

<ul>
        <li >支持 802.11a/b/g/n 1x1,2.4GHz or 5GHz&nbsp;</li>
        <li >支持 HT20/HT40 模式&nbsp;</li>
        <li >支持低功耗信标监听模式,低功耗接收模式,低功耗挂起模式&nbsp;</li>
        <li >内置 AES / DES / SHA 硬件引擎&nbsp;</li>
        <li >支持 TrustZone-M,支持安全启动&nbsp;</li>
        <li >支持 SWD 调试端口访问保护和禁止模式&nbsp;</li>
        <li >支持 BLE 和 BT5.0&nbsp;</li>
        <li >蓝牙支持高功率模式(7dBm,与 Wi-Fi 共享同一 PA)&nbsp;&nbsp;</li>
        <li >Wi-Fi 和 BT 共用同一天线&nbsp;</li>
        <li >支持 STA/AP/STA+AP 工作模式&nbsp;</li>
        <li >支持安卓、IOS 的 Simple Config(APP)WiFi一键配网&nbsp;</li>
        <li >支持蓝牙辅助配网&nbsp;</li>
        <li >支持串口本地升级和远程固件升级(FOTA)</li>
</ul>

<p ><b>二、环境搭建</b></p>

<p >BW16-Kit开发板的Arduino开发环境搭建介绍的文章很多,这里就不在赘述,可参考相关文章。<a href="https://bbs.eeworld.com.cn/thread-1270568-1-1.html" style="color:blue; text-decoration:underline">【安信可BW16-Kit】+搭建环境 - RF/无线 - 电子工程世界-论坛 (eeworld.com.cn)</a></p>

<p ><b>三、WifiWebClient应用开发示例</b></p>

<p >我们使用Ameba连上WiFi,作为客户端,从百度上获取资讯。</p>

<ol>
        <li >ArduinoIDE环境下选择开发板为Ameba,</li>
        <li >选择&ldquo;Tools&rdquo; -&gt; &ldquo;Board&rdquo; -&gt; &ldquo;Arduino Ameba&rdquo;</li>
        <li >然后打开 WiFi Web Client的范例, &ldquo;File&rdquo; -&gt; &ldquo;Examples&rdquo; -&gt; &ldquo;WiFi&rdquo; -&gt; &ldquo;WiFiWebClient&rdquo;</li>
</ol>

<p align="left" ><o:wrapblock> </o:wrapblock></p>

<p>&nbsp;</p>

<div style="text-align: center;"></div>

<p>&nbsp;</p>

<p>将WiFi连线的相关讯息,如下图中黄色标注的地方进行对应的修改。</p>

<p align="left" style="text-align: center;"> &nbsp;</p>

<p >4、程序如下</p>

<pre>
<code>#include &lt;WiFi.h&gt;

char ssid[] = "xxxx"; // your network SSID (name)

char pass[] = "xxxx";    // your network password (use for WPA, or use as key for WEP)

int keyIndex = 0;            // your network key Index number (needed only for WEP)



int status = WL_IDLE_STATUS;

IPAddress server(153,3,238,102);  // numeric IP for Google (no DNS)

//char server[] = "www.baidu.com";    // name address for Google (using DNS)



WiFiClient client;

void setup() {

    Serial.begin(115200);

    while (!Serial) {

        ;

    }

   if (WiFi.status() == WL_NO_SHIELD) {

        Serial.println("WiFi shield not present");

        while (true);

    }

    while (status != WL_CONNECTED) {

        Serial.print("Attempting to connect to SSID: ");

        Serial.println(ssid);

        status = WiFi.begin(ssid, pass);

        delay(10000);

    }

    Serial.println("Connected to wifi");

    printWifiStatus();

    Serial.println("\nStarting connection to server...");

    if (client.connect(server, 80)) {

        Serial.println("connected to server");

        client.println("GET /search?q=ameba HTTP/1.1");

        client.println("Host: www.baidu.com");

        client.println("Connection: close");

        client.println();

    }

    delay(100);

}



void loop() {

    while (client.available()) {

        char c = client.read();

        Serial.write(c);

    }

    if (!client.connected()) {

        Serial.println();

        Serial.println("disconnecting from server.");

        client.stop();



        while (true);

    }

}



void printWifiStatus() {

    Serial.print("SSID: ");

    Serial.println(WiFi.SSID());

    IPAddress ip = WiFi.localIP();

    Serial.print("IP Address: ");

    Serial.println(ip);

    long rssi = WiFi.RSSI();

    Serial.print("signal strength (RSSI):");

    Serial.print(rssi);

    Serial.println(" dBm");

}</code></pre>

<p align="left" >&nbsp;</p>

<p >5、程序使用到下面的API函数:</p>

<p >在连线WiFi时会使用到WiFi.begin();</p>

<p >连线成功后会读取WiFi的信息:显示WiFi的名称WiFi.SSID()</p>

<p >显示WiFi的讯号强度WiFi.RSSI()</p>

<p >显示Ameba的IP信息WiFi.localIP()</p>

<p >建立一个Client:&nbsp;WiFiClient()</p>

<p >客户端通过服务器的IP和端口连线client.connect()</p>

<p >向服务器对发送数据并开启新的一行 client.println()</p>

<p >判断是否有数据从服务器端发送过来client.available()</p>

<p >客户端读取数据client.read()</p>

<p >客户端断开与服务器的连线client.stop()</p>

<p >&nbsp;</p>

<p ><b>四、运行结果</b></p>

<p >显示运行结果如下:</p>

<p align="center" > &nbsp;</p>

<p ><span style="display: none;">&nbsp;</span>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2024-2-26 07:35

<p>测试步骤比较详细,运行结果还行</p>
页: [1]
查看完整版本: 【安信可BW16-Kit开发板】WifiWebClient应用