1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Arduino MKR WiFi 1010でGoogle検索(謎) #Arduino

Last updated at Posted at 2021-08-16

Arduino MKR WiFi 1010でハローワールド(Lチカ) #Arduinoの続きです。

Lチカの次がGoogle検索ってなんかステップ飛ばしすぎな印象もパッと見ありますが、ドキュメントにあるコードを使ってみるだけです。Wi-Fi接続のテストだと思ってください。

そしてArduinoでGoogle検索ってけっこう謎いですがHTTPリクエストのテストって感じです。

Arduino MKR WiFi 1010の書き込みまで

Arduino MKR WiFi 1010でハローワールド(Lチカ) #Arduinoの記事参照。

WiFiNINAライブラリ

Arduino公式のWiFiライブラリの模様です。ワイファイニーナって読むんですかね?

https://www.arduino.cc/en/Reference/WiFiNINA

スイッチサイエンスの販売ページでも紹介されてました。

公式 Arduino WiFiライブラリ
ライブラリを利用すれば、基板を既存のWi-Fiネットワークに接続したり、Arduinoでアクセスポイントを作成するのも簡単です。本製品用のサンプルコードはWiFiNINAライブラリのページをご覧ください。

スケッチ > ライブラリをインクルードからライブラリマネージャを起動してWIFININAで検索し、ライブラリをインストールします。

スクリーンショット 2021-08-16 16.23.34.png

Google検索のサンプル(謎)

WiFi Web Clientの公式サンプルを利用してみます。

サンプルコードコピペ

まずは以下を作成します。公式がコピペしにくい。。

wifisample.ino
/*

  Web client

 This sketch connects to a website (http://www.google.com)

 using the WiFi module.

 This example is written for a network using WPA encryption. For

 WEP or WPA, change the Wifi.begin() call accordingly.

 This example is written for a network using WPA encryption. For

 WEP or WPA, change the Wifi.begin() call accordingly.

 Circuit:

 * Board with NINA module (Arduino MKR WiFi 1010, MKR VIDOR 4000 and UNO WiFi Rev.2)

 created 13 July 2010

 by dlf (Metodo2 srl)

 modified 31 May 2012

 by Tom Igoe

 */

# include <SPI.h>
# include <WiFiNINA.h>

# include "arduino_secrets.h"
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID;        // your network SSID (name)
char pass[] = SECRET_PASS;    // 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;
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.google.com";    // name address for Google (using DNS)

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):

WiFiClient client;

void setup() {

  //Initialize serial and wait for port to open:

  Serial.begin(9600);

  while (!Serial) {

    ; // wait for serial port to connect. Needed for native USB port only

  }

  // check for the WiFi module:

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

    Serial.println("Communication with WiFi module failed!");

    // don't continue

    while (true);

  }

  String fv = WiFi.firmwareVersion();

  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {

    Serial.println("Please upgrade the firmware");

  }

  // attempt to connect to Wifi network:

  while (status != WL_CONNECTED) {

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

    Serial.println(ssid);

    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:

    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:

    delay(10000);

  }

  Serial.println("Connected to wifi");

  printWifiStatus();

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

  // if you get a connection, report back via serial:

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

    Serial.println("connected to server");

    // Make a HTTP request:

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

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

    client.println("Connection: close");

    client.println();

  }
}

void loop() {

  // if there are incoming bytes available

  // from the server, read them and print them:

  while (client.available()) {

    char c = client.read();

    Serial.write(c);

  }

  // if the server's disconnected, stop the client:

  if (!client.connected()) {

    Serial.println();

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

    client.stop();

    // do nothing forevermore:

    while (true);

  }
}

void printWifiStatus() {

  // print the SSID of the network you're attached to:

  Serial.print("SSID: ");

  Serial.println(WiFi.SSID());

  // print your board's IP address:

  IPAddress ip = WiFi.localIP();

  Serial.print("IP Address: ");

  Serial.println(ip);

  // print the received signal strength:

  long rssi = WiFi.RSSI();

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

  Serial.print(rssi);

  Serial.println(" dBm");
}

SSIDとパスワード情報を別ファイルに作成

このやり方、隠したい情報をまとめられて良いですね、初めて知りました。

スクリーンショット 2021-08-16 16.37.00.png

新規タブでarduino_secrets.hという名前のファイルを作成し、以下のように記載します。

arduino_secrets.h
# define SECRET_SSID ""
# define SECRET_PASS ""

SSIDとパスワードを適宜環境に合わせて設定しましょう。

スクリーンショット 2021-08-16 16.40.17.png

参考: https://github.com/arduino-libraries/WiFi101/blob/master/examples/WiFiPing/arduino_secrets.h

実行してみる

実行するとシリアルモニタにGoogle検索の結果が怒涛のテキストで流れてきます笑

所感

ArduinoでGoogle検索ってけっこう謎いですが、Wi-Fiが利用できるか確認、HTTPリクエストのテストなどを考えるとけっこうありなのかもしれないですね。

この手のテストをする場合、サーバー側がいつでも正常動作しててくれないと困りますが、Googleが落ちるってほぼほぼ無いよねという見解なのかなと思うと納得感があります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?