差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
public:ou2019 [2019/08/05 15:42] baba |
public:ou2019 [2019/08/27 15:12] (現在) ishisone [Fusion360によるデバイスのデザイン] |
||
---|---|---|---|
行 43: | 行 43: | ||
* 息子の家の今の気温 | * 息子の家の今の気温 | ||
等をそれぞれのオブジェを模した形状でデザインして,日常の中で自然な情報呈示を実現するデバイスを制作します.情報というとテレビやラジオ,ウェブニュース,SNS等のメディアを考えると思いますが,これらは一般的にはユーザが能動的に情報取得を行うメディアとして位置づけられています.一方で,風が吹くと音がなる風鈴,風見鶏,よる冷えると凍結する水たまり,といった普段何気なく目にしているものにも,どの程度の風速で風が吹いているか,風向きはどちらか,昨晩はどの程度気温が下がったのか,といった情報が含まれており,生活する中で実は私達は様々な情報を受動的に取得してます.このような後者の性質を持つメディアをアンビエントメディアと呼び,本講座ではアンビエントメディアとIoT(Internet Of Things)を組み合わせたデバイスを制作します. | 等をそれぞれのオブジェを模した形状でデザインして,日常の中で自然な情報呈示を実現するデバイスを制作します.情報というとテレビやラジオ,ウェブニュース,SNS等のメディアを考えると思いますが,これらは一般的にはユーザが能動的に情報取得を行うメディアとして位置づけられています.一方で,風が吹くと音がなる風鈴,風見鶏,よる冷えると凍結する水たまり,といった普段何気なく目にしているものにも,どの程度の風速で風が吹いているか,風向きはどちらか,昨晩はどの程度気温が下がったのか,といった情報が含まれており,生活する中で実は私達は様々な情報を受動的に取得してます.このような後者の性質を持つメディアをアンビエントメディアと呼び,本講座ではアンビエントメディアとIoT(Internet Of Things)を組み合わせたデバイスを制作します. | ||
+ | |||
+ | ==== 技術メモ ==== | ||
+ | 本講座で必要な環境,部品等をまとめて置きます. | ||
+ | - PC(講座ではmacOSを利用しますが,利用するすべてのソフトウェアはWindowsでも動作します) | ||
+ | - 3Dプリンタ | ||
+ | - ソフトウェア(すべて無料ソフトウェアです) | ||
+ | - Autodesk社製 Fusion360(3D CAD作成用) | ||
+ | - Arduino(ハードウェアプログラミング用) | ||
+ | - 電子部品 | ||
+ | - ESPr® Developer(ピンソケット実装済) | ||
+ | - https:// | ||
+ | - USBケーブル | ||
+ | - https:// | ||
+ | - フルカラーシリアルLEDタイル基板(5個入り) | ||
+ | - https:// | ||
+ | - ユニバーサル基板(研究室でカットしたものを使っています) | ||
+ | - http:// | ||
+ | |||
===== 当日のスケジュール ===== | ===== 当日のスケジュール ===== | ||
行 59: | 行 77: | ||
| | | | | | ||
====== Fusion360によるデバイスのデザイン ====== | ====== Fusion360によるデバイスのデザイン ====== | ||
- | 主担当:吉野,小澤 | + | 主担当:石曽根,加藤 |
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | <wrap em> | + | <wrap em> |
</ | </ | ||
< | < | ||
< | < | ||
- | <a href=" | + | ふじちゃんの制作過程をスライドにまとめましたので参考にしてください. |
+ | <a href=" | ||
</ | </ | ||
行 74: | 行 93: | ||
< | < | ||
=== ベース部分のモデル === | === ベース部分のモデル === | ||
- | {{ :public:base_model.zip |}} | + | {{ :public:ou_samplemodel.zip |}} |
====== ESP8266を利用したネットワークプログラミング ====== | ====== ESP8266を利用したネットワークプログラミング ====== | ||
- | 担当:須田,馬場 | + | 担当:馬場 |
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | <wrap em> | + | <wrap em> |
- | </ | + | |
- | + | ||
- | <WRAP center round important 60%> | + | |
- | 復習用に追記しました.自宅でプログラムを書き換えるときなどの参考にしてください.(8/ | + | |
</ | </ | ||
行 117: | 行 132: | ||
<アメダスurl>:https:// | <アメダスurl>:https:// | ||
- | <火山情報url>:http://www.tenki.jp/ | + | <火山情報url>:https:// |
プログラムに記述する前に正しくデータが取得できるかはPCのブラウザからでも確認できます.以下のURLはクリックすると,さいたま市の気温,富士山の噴火警戒レベル,さいたま市の降水量が確認できます.自分の取得したい場所に置き換えて,Webブラウザのアドレスバーに入力してアクセスしてみましょう. | プログラムに記述する前に正しくデータが取得できるかはPCのブラウザからでも確認できます.以下のURLはクリックすると,さいたま市の気温,富士山の噴火警戒レベル,さいたま市の降水量が確認できます.自分の取得したい場所に置き換えて,Webブラウザのアドレスバーに入力してアクセスしてみましょう. | ||
行 126: | 行 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> | ||
行 154: | 行 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プログラムを書き換える必要があるので,参考にしてください. | ||
行 343: | 行 186: | ||
{{ : | {{ : | ||
- | |||
{{ : | {{ : | ||
参考リンク:[[http:// | 参考リンク:[[http:// | ||
- | ----- | + | ====== プログラムの基本 ====== |
+ | 講座の中で紹介した文法比較は下記リンクからご覧ください。 | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | ====== 作成データ ====== | ||
+ | ** 本講座で作成した個人データを置いておきます. ** | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * {{ : | ||
その他,気軽にメールなどで質問してください.\\ | その他,気軽にメールなどで質問してください.\\ | ||
- | 9192hs@gmail.com(須田)\\ | ||
studio@tetsuakibaba.jp(研究室) | studio@tetsuakibaba.jp(研究室) | ||
- | ====== 撮影 ====== | ||
- | 担当:石曽根 | ||
- | <WRAP center round info 60%> | ||
- | <wrap em> | ||
- | </ | ||
- | |||
- | みなさんの制作物及びインタビュー動画を作成します.一人30秒程度のインタビューを行います.下記は2017年度の紹介映像になります.参考までに御覧ください. | ||
- | < | ||
- | <iframe width=100% height=480 src=" | ||
- | </ | ||
- | |||
- | * 担当者用補足リンク(キャプション生成用アプリケーション):http:// |