差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
public:ou2019 [2019/08/06 13:31] baba |
public:ou2019 [2019/08/27 15:12] (現在) ishisone [Fusion360によるデバイスのデザイン] |
||
---|---|---|---|
行 84: | 行 84: | ||
< | < | ||
< | < | ||
- | <a href=" | + | ふじちゃんの制作過程をスライドにまとめましたので参考にしてください. |
+ | <a href=" | ||
</ | </ | ||
行 92: | 行 93: | ||
< | < | ||
=== ベース部分のモデル === | === ベース部分のモデル === | ||
- | {{ :public:base_model.zip |}} | + | {{ :public:ou_samplemodel.zip |}} |
====== ESP8266を利用したネットワークプログラミング ====== | ====== ESP8266を利用したネットワークプログラミング ====== | ||
行 99: | 行 100: | ||
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | <wrap em> | + | <wrap em> |
</ | </ | ||
行 131: | 行 132: | ||
<アメダスurl>:https:// | <アメダスurl>:https:// | ||
- | <火山情報url>:http://www.tenki.jp/ | + | <火山情報url>:https:// |
プログラムに記述する前に正しくデータが取得できるかはPCのブラウザからでも確認できます.以下のURLはクリックすると,さいたま市の気温,富士山の噴火警戒レベル,さいたま市の降水量が確認できます.自分の取得したい場所に置き換えて,Webブラウザのアドレスバーに入力してアクセスしてみましょう. | プログラムに記述する前に正しくデータが取得できるかはPCのブラウザからでも確認できます.以下のURLはクリックすると,さいたま市の気温,富士山の噴火警戒レベル,さいたま市の降水量が確認できます.自分の取得したい場所に置き換えて,Webブラウザのアドレスバーに入力してアクセスしてみましょう. | ||
行 140: | 行 141: | ||
http:// | http:// | ||
</ | </ | ||
+ | ====== ESP8266に書き込むプログラム ====== | ||
+ | * 雛形:{{ : | ||
- | ----- | + | ファイルのダウンロード後、展開したフォルダ内の fujichan.ino をArduinoソフトウェアで開きます。 |
- | + | ||
- | **ESP8266に書き込むプログラム** | + | |
- | + | ||
- | <wrap em> | + | |
- | + | ||
- | このプログラムをダウンロードしてsketch_final.ino開いたら,fujichanClient.hというタブを選択してください. | + | |
- | + | ||
- | {{ : | + | |
以下の,Wi-Fiネットワーク設定と,取得したい場所のアメダス・火山情報のURLの部分を,上で確認したものに書き換えます. | 以下の,Wi-Fiネットワーク設定と,取得したい場所のアメダス・火山情報のURLの部分を,上で確認したものに書き換えます. | ||
+ | 初期設定では、研究室内のWifiに接続し、富士山の気温を色で表示するプログラムになっています。まずは書き込み設定を | ||
+ | 確認し、プログラムを書き込み、動作を確認しましょう。 | ||
<code cpp> | <code cpp> | ||
行 168: | 行 164: | ||
このプログラムでは,指定したSSIDとパスワードを使ってWi-Fiへ接続する'' | このプログラムでは,指定したSSIDとパスワードを使ってWi-Fiへ接続する'' | ||
- | |||
- | < | ||
- | <code cpp> | ||
- | #include " | ||
- | #include < | ||
- | #include " | ||
- | #include " | ||
- | #include " | ||
- | |||
- | myNeoPixel led = myNeoPixel(1, | ||
- | |||
- | // Wi-Fiネットワーク設定 | ||
- | const char* ssid = " | ||
- | const char* pass = " | ||
- | |||
- | // Webサーバ上のプログラムのURL | ||
- | const char* host = " | ||
- | const char* path = "/ | ||
- | |||
- | // 取得したい場所のアメダス・火山情報のURL | ||
- | const char* url_temp = " | ||
- | const char* url_vol = " | ||
- | |||
- | // Wi-Fiへ接続する関数 | ||
- | void connect() { | ||
- | Serial.println(); | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | Serial.println(ssid); | ||
- | WiFi.begin(ssid, | ||
- | while (WiFi.status() != WL_CONNECTED) { | ||
- | // | ||
- | led.fadeIn(50, | ||
- | led.fadeOut(500); | ||
- | Serial.print(" | ||
- | } | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | Serial.print(WiFi.localIP()); | ||
- | Serial.println(" | ||
- | } | ||
- | |||
- | // Webサーバからデータを取得する関数 | ||
- | void update(float* _temperature, | ||
- | // (1)Webサーバーに接続する(TCP接続) | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | Serial.println(host); | ||
- | WiFiClient client; | ||
- | const int httpPort = 80; // HTTP通信のポート番号は80 | ||
- | if (!client.connect(host, | ||
- | Serial.println(" | ||
- | return; | ||
- | } | ||
- | // (2)要求するファイルのURLを用意する | ||
- | String url = path; | ||
- | url += "? | ||
- | url += url_temp; | ||
- | url += "& | ||
- | url += url_vol; | ||
- | Serial.print(" | ||
- | Serial.println(url); | ||
- | // (3)HTTPリクエストをWebサーバーに送信する | ||
- | client.print(String(" | ||
- | " | ||
- | " | ||
- | unsigned long timeout = millis(); | ||
- | while (client.available() == 0) { | ||
- | if (millis() - timeout > 5000) { | ||
- | Serial.println(">>> | ||
- | client.stop(); | ||
- | return; | ||
- | } | ||
- | } | ||
- | // (4)HTTPレスポンスから必要なデータを取り出す | ||
- | while (client.available()) { | ||
- | String line = client.readStringUntil(' | ||
- | // | ||
- | // 気温、噴火レベル、降水量の順番で並んでおり、カンマで区切られています。 | ||
- | int commaIndex = line.indexOf("," | ||
- | int lastCommmaIndex = line.lastIndexOf("," | ||
- | if (commaIndex >= 0) { | ||
- | *_temperature = line.substring(0, | ||
- | *_funkaLevel = line.substring(commaIndex + 1).toInt(); | ||
- | *_precipitation = line.substring(lastCommmaIndex + 1).toFloat(); | ||
- | } | ||
- | } | ||
- | Serial.println(); | ||
- | Serial.println(" | ||
- | |||
- | Serial.print(" | ||
- | Serial.println(*_temperature); | ||
- | Serial.print(" | ||
- | Serial.println(*_funkaLevel); | ||
- | Serial.print(" | ||
- | Serial.println(*_precipitation); | ||
- | | ||
- | Serial.println(">>> | ||
- | } | ||
- | </ | ||
- | < | ||
プログラムが変更できたら,メニューバーの[ツール]を開いて,ボードやシリアルポートの設定が以下のようになっているか確認して,ESP8266にArduinoプログラムの書き込みを行いましょう.Arduino Unoよりも時間がかかるので注意してください. | プログラムが変更できたら,メニューバーの[ツール]を開いて,ボードやシリアルポートの設定が以下のようになっているか確認して,ESP8266にArduinoプログラムの書き込みを行いましょう.Arduino Unoよりも時間がかかるので注意してください. | ||
- | {{ :public:esp8266_upload.png? | + | {{:public:スクリーンショット_2019-08-26_14.57.56.png?400|}} |
- | + | ||
- | シリアルモニターを開いて,インターネットから取得した,気温,噴火警戒レベル,降水量の情報が表示されればOKです.この情報を,先ほど作ったデータに応じた音や光の変化の処理に反映させましょう.(スピーカーのピン番号が9から16に変わっています.直接ピン番号を指定する場合は注意) | + | |
- | + | ||
- | ----- | + | |
- | + | ||
- | **プログラムを一つにまとめる** | + | |
- | + | ||
- | ダウンロードしたプログラム(sketch_final)の大部分は,先ほどシリアルモニターでデータを送ったプログラム(sketch_simpleFujichanDev)と同じです.< | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | <code cpp> | + | |
- | #include " | + | |
- | + | ||
- | #define UPDATE_INTERVAL 60*5 // 更新間隔[秒] | + | |
- | + | ||
- | float temperature | + | |
- | int | + | |
- | float precipitation = 0; // 降水量(単位は[mm/ | + | |
- | + | ||
- | void setup() { | + | |
- | led.setup(); | + | |
- | Serial.begin(115200); | + | |
- | Serial.println(" | + | |
- | + | ||
- | // Wi-Fiへ接続する関数 | + | |
- | connect(); | + | |
- | // Webサーバからデータを取得する関数 | + | |
- | update(& | + | |
- | update2(); | + | |
- | } | + | |
- | + | ||
- | void loop() { | + | |
- | + | ||
- | ~中略~ | + | |
- | + | ||
- | if ( metro(UPDATE_INTERVAL) == true ) { // 更新時間が来たら | + | |
- | update(& | + | |
- | update2(); | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | void update2(){ | + | |
- | /* 気温が更新された時の処理.ここから */ | + | |
- | + | ||
- | + | ||
- | /* ここまで */ | + | |
- | } | + | |
- | + | ||
- | // 更新時間を教えてくれる関数 | + | |
- | static unsigned long int time = 0; | + | |
- | bool metro(int seconds) { | + | |
- | if ( (millis() - time) > seconds * 1000 ) { | + | |
- | time = millis(); | + | |
- | return true; | + | |
- | } | + | |
- | else { | + | |
- | return false; | + | |
- | | + | |
- | } | + | |
- | </ | + | |
----- | ----- | ||
**補足:データ更新の間隔** | **補足:データ更新の間隔** | ||
- | |||
- | データ更新の間隔は,一番下の更新時間を教えてくれる関数で管理しています.'' | ||
< | < | ||
- | #define UPDATE_INTERVAL | + | #define UPDATE_INTERVAL |
</ | </ | ||
- | 手動で情報更新する場合は,シリアルモニターから「3001」を送信します. | ||
- | ----- | + | ====== |
- | + | ||
- | **補足:開発環境を整える** | + | |
Arduino IDEでESP8266を開発するためには,以下の作業が必要です.自宅のWi-Fiに接続するにはArduinoプログラムを書き換える必要があるので,参考にしてください. | Arduino IDEでESP8266を開発するためには,以下の作業が必要です.自宅のWi-Fiに接続するにはArduinoプログラムを書き換える必要があるので,参考にしてください. | ||
行 357: | 行 186: | ||
{{ : | {{ : | ||
- | |||
{{ : | {{ : | ||
参考リンク:[[http:// | 参考リンク:[[http:// | ||
- | ----- | + | ====== プログラムの基本 ====== |
+ | 講座の中で紹介した文法比較は下記リンクからご覧ください。 | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | ====== 作成データ ====== | ||
+ | ** 本講座で作成した個人データを置いておきます. ** | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
その他,気軽にメールなどで質問してください.\\ | その他,気軽にメールなどで質問してください.\\ | ||
studio@tetsuakibaba.jp(研究室) | studio@tetsuakibaba.jp(研究室) |