差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
public:ou2019 [2019/08/05 15:39] 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 |}} |
- | ====== Arduinoを利用したフィジカルコンピューティング基礎 ====== | ||
- | |||
- | 担当:須田,馬場 | ||
- | |||
- | <WRAP center round info 60%> | ||
- | <wrap em> | ||
- | </ | ||
- | |||
- | <WRAP center round important 60%> | ||
- | 復習用に追記を行いました(8/ | ||
- | </ | ||
- | |||
- | |||
- | **フィジカルコンピューティング**とは,センサやアクチュエータ(出力部品)を使って,私たちの身の回りの物理的な世界と,コンピュータ上にあるような情報の世界をつなぐことです.今回は,Fujichanデバイスをベースに,日常の中で自然に情報提示する**アンビエントメディア**を制作します.LEDやスピーカーを使って,光や音といった環境の情報をコントロールします. | ||
- | |||
- | **Arduino**は,エンジニアだけでなく,デザイナーやアーティストでも,マイクロコントローラ(小さなコンピュータ)を簡単に使えるように作られた汎用マイコンボードです.PC上でプログラムを記述し,それをUSBケーブルで接続されたボードに転送すると,ボード上のマイクロコントローラがプログラム通りに動作します.組み込みと呼ばれる,PCを利用しない小さなデバイスでは,一般的な開発手法です. | ||
- | |||
- | https:// | ||
- | |||
- | Arduinoには,性能や大きさによって様々な種類がありますが,このワークショップでは最も一般的なArduino Unoを使います.購入する場合は,周辺機器が揃っている[[https:// | ||
- | |||
- | {{ : | ||
- | |||
- | **LEDをチカチカさせるプログラム(Lチカ)** | ||
- | |||
- | <code cpp sketch_blink.ino> | ||
- | int led = 13; // ledにつながっているピンは13番 | ||
- | |||
- | // setup()は,最初に一度だけ実行されます. | ||
- | void setup() { | ||
- | pinMode(led, | ||
- | } | ||
- | |||
- | // loop()は,繰り返し実行されます. | ||
- | void loop() { | ||
- | digitalWrite(led, | ||
- | delay(1000); | ||
- | digitalWrite(led, | ||
- | delay(1000); | ||
- | } | ||
- | </ | ||
- | |||
- | プログラムを書き込むとき,ボードとシリアルポートが正しく選択されているか注意! | ||
- | |||
- | {{ : | ||
- | |||
- | {{ : | ||
- | |||
- | ----- | ||
- | |||
- | * プログラミングに使える文字は,半角の英数字と記号です. | ||
- | * プログラムは基本的に,上から順番に実行されていきます. | ||
- | * Arduinoのプログラムには,必ず'' | ||
- | * '' | ||
- | |||
- | * '' | ||
- | * '' | ||
- | |||
- | * [[http:// | ||
- | * [[http:// | ||
- | |||
- | ----- | ||
- | |||
- | **電子工作** | ||
- | |||
- | Arduinoのピンに様々な電子部品を差し込んで,プログラムで制御できる電子回路を組むことができます.ブレッドボードやジャンプワイヤを使って,半田づけをする必要なく,電子回路を試すことができます.プログラムでも電子回路でも,何度も試作を繰り返して,物を作っていく手法を**プロトタイピング**といいます. | ||
- | |||
- | {{ : | ||
- | |||
- | * [[https:// | ||
- | * [[https:// | ||
- | |||
- | ----- | ||
- | < | ||
- | <code cpp speaker.ino> | ||
- | int speaker = 9; // スピーカーをつないだピンは9番 | ||
- | int duration = 500; // 音の長さ | ||
- | |||
- | void setup() { | ||
- | | ||
- | } | ||
- | void loop() { | ||
- | tone(speaker, | ||
- | delay(duration); | ||
- | tone(speaker, | ||
- | delay(duration); | ||
- | tone(speaker, | ||
- | delay(duration); | ||
- | tone(speaker, | ||
- | delay(duration); | ||
- | tone(speaker, | ||
- | delay(duration); | ||
- | tone(speaker, | ||
- | delay(duration); | ||
- | tone(speaker, | ||
- | delay(duration); | ||
- | tone(speaker, | ||
- | delay(duration); | ||
- | noTone(speaker); | ||
- | delay(duration); | ||
- | } | ||
- | </ | ||
- | < | ||
- | ----- | ||
- | |||
- | **フルカラーLEDモジュールを使う** | ||
- | |||
- | フルカラーLEDモジュールを使うには,ライブラリを読み込む必要があります.ライブラリの追加方法などは以下を参照してみてください. | ||
- | [[http:// | ||
- | |||
- | 複数のLEDの同時制御なども簡単にできますが,以下のプログラムでは1つのLEDに色を設定し,反映させる関数を紹介します. | ||
- | |||
- | <code cpp neoPixel.ino> | ||
- | #include < | ||
- | |||
- | Adafruit_NeoPixel led = Adafruit_NeoPixel(1, | ||
- | |||
- | int duration = 1000; // 点灯時間 | ||
- | |||
- | void setup() { | ||
- | led.begin(); | ||
- | } | ||
- | |||
- | void loop() { | ||
- | led.setPixelColor(0, | ||
- | led.show(); // 設定を反映させる | ||
- | delay(duration); | ||
- | led.setPixelColor(0, | ||
- | led.show(); | ||
- | delay(duration); | ||
- | led.setPixelColor(0, | ||
- | led.show(); | ||
- | delay(duration); | ||
- | } | ||
- | </ | ||
- | |||
- | {{ : | ||
- | |||
- | |||
- | < | ||
- | <code cpp fade2.ino> | ||
- | #include < | ||
- | |||
- | Adafruit_NeoPixel led = Adafruit_NeoPixel(1, | ||
- | |||
- | void setup() { | ||
- | led.begin(); | ||
- | } | ||
- | |||
- | void loop() { | ||
- | // 変数iの初期値は0,50より小さければ繰り返す.iは繰り返すたびに1ずつ増える. | ||
- | for(int i=0; i<50; i++){ | ||
- | led.setPixelColor(0, | ||
- | led.show(); | ||
- | delay(10); // 10ミリ秒停止 | ||
- | } | ||
- | // 変数iの初期値は50,0より大きければ繰り返す.iは繰り返すたびに1ずつ減る. | ||
- | for(int i=50; i>0; i--){ | ||
- | led.setPixelColor(0, | ||
- | led.show(); | ||
- | delay(10); | ||
- | } | ||
- | } | ||
- | </ | ||
- | < | ||
- | |||
- | **for文**は,繰り返し処理の書き方です.'' | ||
- | |||
- | ----- | ||
- | |||
- | < | ||
- | |||
- | Fujichanのプログラムでは,色と時間を指定してLEDをふわっと光らせるプログラムを用意しています.'' | ||
- | |||
- | {{ : | ||
- | |||
- | <code cpp> | ||
- | #include " | ||
- | |||
- | myNeoPixel led = myNeoPixel(1, | ||
- | |||
- | void setup() { | ||
- | led.setup(); | ||
- | } | ||
- | |||
- | void loop() { | ||
- | led.fadeIn(50, | ||
- | led.fadeOut(500); | ||
- | led.fadeIn(0, | ||
- | led.fadeOut(500); | ||
- | led.fadeIn(0, | ||
- | led.fadeOut(500); | ||
- | } | ||
- | </ | ||
- | < | ||
- | |||
- | ----- | ||
- | |||
- | **データによって変化させる**< | ||
- | |||
- | 複雑なものの開発では,最終的に目指す機能をいくつかに切り分けて開発し,最後にまとめるという開発手法が一般的です.IoTデバイスはインターネットからデータを取得しますが,まずはPCからデータを送ってそれに応じた音や光の変化を検討します. | ||
- | |||
- | これまでUSBケーブルを通して,プログラムの書き込みを行なっていましたが,**シリアル通信**というデータの送受信を行うこともできます.以下のプログラムをArduinoに書き込んだら,ツールバー右にある虫眼鏡マークからシリアルモニターを開きます.通信速度を115200に設定して,数値を入力して送信すると,Arduinoプログラム上の噴火警戒レベルが設定できます. | ||
- | |||
- | <code cpp serial1.ino> | ||
- | int speaker = 9; | ||
- | |||
- | int funkaLevel = 1; // 噴火警戒レベル(0~5)を記憶する変数を用意 | ||
- | |||
- | void setup() { | ||
- | Serial.begin(115200); | ||
- | Serial.println(" | ||
- | } | ||
- | |||
- | void loop() { | ||
- | | ||
- | if( Serial.available() > 0 ){ // もしデータが届いていたら | ||
- | float val = Serial.parseFloat(); | ||
- | | ||
- | Serial.println(val); | ||
- | | ||
- | funkaLevel = val; // 受け取ったデータを噴火警戒レベルに設定 | ||
- | |||
- | if(funkaLevel >= 4){ // もし噴火警戒レベルが4以上に設定されたら | ||
- | for(int i=0; i< | ||
- | tone(speaker, | ||
- | delay(400); | ||
- | noTone(speaker); | ||
- | delay(100); | ||
- | } | ||
- | } | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | **if文**という条件に応じた処理の書き方を使って,「もし新しいデータが届いていたら」行う処理を書いています.'' | ||
- | |||
- | ----- | ||
- | |||
- | アンビエントメディアとしてのデバイスをデザインするとき,たとえば次のようなことをどう設計するかが重要です. | ||
- | |||
- | * <wrap hi> | ||
- | * <wrap hi> | ||
- | |||
- | 下のプログラムは,シリアル通信を使って,気温,噴火警戒レベル,降水量を設定できるようにしてあります(いくつか外部ファイルを読み込んでいますが,プログラムの流れは上のプログラムと同じです). | ||
- | * 0 ~ : 気温[°C] | ||
- | * 1000~1005 : 噴火警戒レベル(0~5) | ||
- | * 2000~ : 降水量[mm/ | ||
- | * 4001 : LEDもスピーカーもOFF | ||
- | |||
- | このプログラムを使って,データに応じて情報を提示するプログラムを書いてみます.まずは,これまでにやった,LEDを制御するプログラムの書き方を参考に,< | ||
- | |||
- | {{ : | ||
- | |||
- | < | ||
- | <code cpp> | ||
- | #include " | ||
- | #include " | ||
- | #include " | ||
- | |||
- | myNeoPixel led = myNeoPixel(1, | ||
- | // int speaker = 9; // rain.hに書いてあるので,ここでは書かない | ||
- | |||
- | float temperature | ||
- | int | ||
- | float precipitation = 0; // 降水量(単位は[mm/ | ||
- | |||
- | void setup() { | ||
- | led.setup(); | ||
- | Serial.begin(115200); | ||
- | Serial.println(" | ||
- | } | ||
- | |||
- | void loop() { | ||
- | if ( Serial.available() > 0 ) { // もしデータが届いていたら | ||
- | float val = Serial.parseFloat(); | ||
- | if ( val < 1000 ) { // 受け取ったデータが1000より小さいなら | ||
- | temperature = val; // 受け取ったデータを気温に設定 | ||
- | // ここに,変数temperatureを使って,気温が更新された時の処理を書いてみましょう | ||
- | /* 気温が更新された時の処理.ここから */ | ||
- | | ||
- | |||
- | |||
- | | ||
- | |||
- | /* ここまで */ | ||
- | } | ||
- | else if ( val >= 1000 && val < 2000) { // 受け取ったデータが1000以上かつ2000より小さいなら | ||
- | funkaLevel = val - 1000.0; | ||
- | // ここに,噴火警戒レベルが更新された時の処理 | ||
- | if(funkaLevel >= 4){ // もし噴火警戒レベルが4以上なら | ||
- | for(int i=0; i< | ||
- | tone(speaker, | ||
- | delay(400); | ||
- | noTone(speaker); | ||
- | delay(100); | ||
- | } | ||
- | } | ||
- | } | ||
- | else if ( 2000 <= val && val < 3000 ) { // 受け取ったデータが2000以上なら | ||
- | precipitation = val - 2000.0; | ||
- | // ここに,降水量が更新された時の処理 | ||
- | } | ||
- | else if ( (int)val == 4001 ) { // 受け取ったデータが4001なら | ||
- | led.fadeOut(500); | ||
- | precipitation = 0.0; // 雨音を止める | ||
- | return; | ||
- | } | ||
- | else { // それ以外なら何もしない | ||
- | return; | ||
- | } | ||
- | // シリアルモニタに3つのデータを表示 | ||
- | Serial.println(); | ||
- | Serial.print(" | ||
- | Serial.println(temperature); | ||
- | Serial.print(" | ||
- | Serial.println(funkaLevel); | ||
- | Serial.print(" | ||
- | Serial.println(precipitation); | ||
- | } | ||
- | makeRainSound(precipitation); | ||
- | delay(1); | ||
- | } | ||
- | </ | ||
- | < | ||
- | |||
- | if文をいくつかの条件に分岐させるときは,**else文**を使います.最初のif文の後に,'' | ||
====== ESP8266を利用したネットワークプログラミング ====== | ====== ESP8266を利用したネットワークプログラミング ====== | ||
- | 担当:須田,馬場 | + | 担当:馬場 |
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | <wrap em> | + | <wrap em> |
- | </ | + | |
- | + | ||
- | <WRAP center round important 60%> | + | |
- | 復習用に追記しました.自宅でプログラムを書き換えるときなどの参考にしてください.(8/ | + | |
</ | </ | ||
行 444: | 行 132: | ||
<アメダスurl>:https:// | <アメダスurl>:https:// | ||
- | <火山情報url>:http://www.tenki.jp/ | + | <火山情報url>:https:// |
プログラムに記述する前に正しくデータが取得できるかはPCのブラウザからでも確認できます.以下のURLはクリックすると,さいたま市の気温,富士山の噴火警戒レベル,さいたま市の降水量が確認できます.自分の取得したい場所に置き換えて,Webブラウザのアドレスバーに入力してアクセスしてみましょう. | プログラムに記述する前に正しくデータが取得できるかはPCのブラウザからでも確認できます.以下のURLはクリックすると,さいたま市の気温,富士山の噴火警戒レベル,さいたま市の降水量が確認できます.自分の取得したい場所に置き換えて,Webブラウザのアドレスバーに入力してアクセスしてみましょう. | ||
行 453: | 行 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> | ||
行 481: | 行 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プログラムを書き換える必要があるので,参考にしてください. | ||
行 670: | 行 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:// |