ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Posts Tagged ‘マイコンボード

ESP8266 Wi-Fi SoC を搭載した nodeMCU には大きさ、形が異なるいくつかのタイプがある。一見同じもののように見える 2つのタイプを比べてみる。

leave a comment »

いわゆる nodeMCU と呼ばれるマイコンボードは、オンボードに ESP8266 の Wi-Fi モジュールを搭載しており、IoTデバイスとして安価で使いやすいものだ。IoT ではマイコンボードをネットワークにつなぐことに大きな意味があるのだが、他の多くの安価なマイコンボードではネットワーク関連のデバイスはオプションパーツ扱いになっていることが多い。パーツがオプションであるということは、自由度がある代わりに本体とパーツ、間のインタフェースと、トラブルシュートに要する項目が増える問題がある。その点、オンボードでネットワークモジュールを搭載しているマイコンボードでは、それらを考慮する必要がないので開発が楽だ。しかも nodeMCU は極めて安価である。

nodeMCU は日本の Amazon でも買うことができるが、大きさや形が異なるいくつかのタイプがある。このうち、よく似ていて一見すると同じもののように見える 2つのタイプを比べよう。

P1490289_edit_mid_640_480

こうして横に並べて比べると違いがわかるが、ネットで注文するときなどは、よく見ないと違いがわからない。まず全体の大きさが違うのだが、これらを別々のページで見たときには、大きさではわかりにくいだろう。そこで比べるには、搭載している部品の配置に注目するといい。わかりやすいのは USB コネクタの近くにある、おそらく USB シリアルインタフェースチップだと思われる黒い IC チップだ。写真の右側、「LoLin」と呼ばれる nodeMCU では横長のチップが搭載されているが、左側の「Amica」と呼ばれる nodeMCU では正方形の小さめのチップが搭載されている。あと違いが目に付くのは、左の「Amica」のきれいに整列したチップ抵抗だと思われる部品、あるいはチップコンデンサと思われるオレンジ色の大きめの部品あたりだろう。

P1490291_mid_640_480

裏から見れば違いはよくわかる。写真の右側には、おそらく雲をイメージしてデザインしたシンボルマークと「NODEMCU Amica」の名前がある。右側は「LoLin」と書かれている。

さて、この 2タイプの nodeMCU だが、プロトタイピングにおいて大きさの違いが使い勝手に影響するところは、一般的な長潟のブレッドボードを使うときに、大きい方の「LoLin」ではピンの穴を全部覆ってしまい、信号を取り出せなくなるところだ。これに対して小さい方の「Amica」では、かろうじて 1ラインは信号を取り出せるように残っている。

P1490294_edit_640_480

もし「LoLin」を長潟のブレッドボードで使いたいなら、2枚ならべて使うことになるだろう。

P1490295_edit_640_480

P1490291_mid_640_480

小学校でマイコンボードの体験会をする。いわゆるLチカの発展形。

leave a comment »

P1460655_mid_640_480

明日は小学校で子供たちにマイコンボードの体験コーナーをする。短い時間で低学年から高学年までの子供たちに楽しさを伝えるために工夫をする。いわゆる「Lチカ」をベースに。

たとえば小学校の高学年、5年生と6年生対象なら、パソコンを使って簡単なプログラミングをすることができるかもしれない。それにしてもある程度のまとまった時間が必要だし、パソコンなど機材を準備しなければならない。

10分程度の短い時間で、小学校1年生から6年生までの幅広い子供たちにマイコンボードや電子工作の楽しさを伝えるにはどうすればいいか。そこにはいろんな工夫の余地がある。

子供たちの輝く瞳を見たい。だから教育は面白い。

2016年10月1日のアドミンティーチャーズのラボワークでは、ESP8266 WiFi モジュールを搭載した Arduino WeMos D1 を 2台使い、一方を WiFi アクセスポイント、もう一方を WiFi クライアントとして接続し、Web サービスでデータ通信をする。

leave a comment »

アドミンティーチャーズのラボワークでは、8月と9月にESP8266 WiFi モジュールを搭載した Arduino WeMos D1 を使って通信を試した。WeMos D1 は安価で手に入れやすいマイコンボードで、実習教材にも適していると思われる。しかしまとまった解説やサンプルスケッチがなかなか見当たらない。多く見られるのは WiFi クライアントにしてアクセスポイントに接続し、Web サービスを実装するというものだが、WiFi クライアントにすることや Web クライアントを実装する事例は少ない。試行錯誤が必要だったが、うまく通信できるようになった。

今回の「ラボワーク」では 2台の WeMos D1 を使う。一方の WeMod D1 を WiFi アクセスポイントの設定にし、Web サービスを実装する。Web サービスでは、アナログ I/O ポート A0 に接続したボリュームの電圧を Web ページに表示するようにしておく。もう一方の WeMos D1 は WiFi クライアントの設定をし、起動したら WiFi アクセスポイントにした WeMos D1 に接続するようにし、Web クライアントを実装して Web ページを取得し、HTML テキストからボリュームの値を取り出して Multifunction Shield の 7セグメント LED に表示する。

マイコンボードが互いに WiFi 接続できれば応用範囲が広がるだろう。また Web サービスや Web クライアントを実装することで、Web サービスの仕組みも理解できる。

アドミンティーチャーズのラボワークは、会の性質上「情報教育に関心のある方」としているが、必ずしも学校関係者に限定しているわけではないので、興味のある方はぜひ来てほしい。またノートパソコンの Arduino 開発環境は、当日ラボワークで設定することもできるし、ノートパソコンがなくても実習を楽しめるし、ゆるやかな体験、交流の場なので、気軽に手ぶらで来てもらってかまわない。

アドミンティーチャーズ Web サイト
https://adminteachers.wordpress.com/

P1400528_mid_640_480

アドミンティーチャーズのラボワーク LW04 「W5100 イーサネットシールドを使ったWebサービスのプログラミング」の報告

leave a comment »

今年2月から毎月第一土曜日と決めて神戸三ノ宮の会議室で行っているマイコンボード勉強会「ラボワーク」。5月は「W5100 イーサネットシールドを使ったWebサービスのプログラミング」をテーマにした。

P1100979_clip_640_480

このイーサネットシールドは Arduino の事実上のデファクトスタンダードなイーサネットシールドで、Wiznet の W5100 チップが使われている。Arduino IDE 開発環境で標準でライブラリが用意されているのでプログラミングもしやすい。

このイーサネットシールドを使って Web サービスを実装するには次のようにする。

———————————————————————————

void setup() {
  Ethernet.begin(mac,ip);
  server.begin();
}

void loop() {
  EthernetClient client = server.available();
}

———————————————————————————

たったこれだけで Web サービスが動く。あとは受け取ったデータを解析し、適切な HTML テキストをクライアントに返すだけだ。

クライアントに対してテキストを送り返すには次の一行でいい。

———————————————————————————

  client.println("This is my web");

———————————————————————————

ただこれを単に void loop() に書くだけでは、ひたすら際限なく同じテキストをクライアントに送り続けることになる。そこでクライアントから接続要求があったときに、テキストを一回だけ送るという処理が必要になる。

たとえば次のスケッチは接続要求のキャラクタを文字列につなぎ、文字列に「GET」があれば HTML のリクエストだと判断し、一回だけテキストを返してサービスを終了する。

———————————————————————————

void loop() {
  EthernetClient client = server.available();
    if(client.connected() == 1){
    c = client.read();
    stc.concat(c);
    if(client.available() == 0){
      Serial.println(stc);
    }
  }
  if(stc.indexOf("GET") != -1 && client.available() == 0){
    client.println("This is my web");
    client.stop();
    stc = "";
  }
}

———————————————————————————

これでクライアントから接続すると「This is my web」の文字がブラウザに表示される。正しい HTML 文ではないが、表示されるはずだ。

クライアントからの要求が POST メソッドだったときは、受け取ったテキストを解析して必要な処理をさせることができる。たとえば HTML 文にチェックボックスとボタンを用意して、8 x8 マトリックス LED をコントロールするようなこともできる。

P1160747_mid_640_480

P1160639_mid_640_480

しかし、メモリの制約だと思われるが、あまり長い HTML テキストを送ることや POST メソッドも長いメッセージを受け取ることができない。そこで、HTML テキストは SD カードに保存しておき逐次読みだして送信することを考えなければいけない。また POST メソッドも不要なテキストを削除して処理する必要がある。

イーサネットシールドになぜ SD カードスロットが付いているのかが疑問だったが、実用的な Web サービスを構築するには長い HTML テキストを処理する必要があるからだ、ということがよくわかった。

Arduino と Web サービスは今後も「ラボワーク」でとりあげることにする。無線ネットワークもやってみたい。わかったことの詳細は、また別途項を改めて報告したい。

神戸三ノ宮で開催したアドミンティーチャーズの「ラボワーク LW03 – マルチファンクションシールドを使ったシフトレジスタとダイナミック点灯のプログラミング」

leave a comment »

「ラボワーク」と題してこの 2月から兵庫県神戸市中央区、JR三ノ宮駅近くの会議室を借りて勉強会をやっている。今回は 3回目で、実験用のマルチファンクションシールドを使ったプログラミンを体験した。

マルチファンクションシールドは Arduino UNO 用に作られた実験用シールドで、昔の言い方では「ドーターボード」と呼ばれる一種の拡張ボードだ。Arduino UNO のI/Oピンにあわせて作られているが、必要なピンだけジャンパケーブルでつなげば他のマイコンボードでも使える。

P1140072_mid_640_480

このマルチファンクションボードには 4つの 7セグメント LED チューブ、3つのボタン、4つの LED、ブザー、ポテンショメーター(ボリューム)がついている。これらの部品をマイコンボードでテストしようと思えばブレッドボードで回路を組んでもいいのだが、このように基盤に取り付けられていると簡単に実験できる。ラボワークではマルチファンクションシールドと Arduino UNO、Digispark などを人数分用意した。

P1130534_mid_640_480

Arduino UNO でマルチファンクションシールドを使うには、そのまま上に載せればいい。

P1130543_mid_640_480

Arduino UNO を使う場合は上に載せるだけだが、Digispark で使う場合は次のように 5本のジャンパワイヤーで接続する。3本はデータ送信用、2本は電源供給用だ。

P1140074_mid_640_480

P1130536_mid_640_480

Digispark は前回のラボワークではオンボードの LED をコントロールしただけだったので加工の必要がなかったが、今回のようにジャンパワイヤーで I/O を接続するには I/O ピンをはんだ付けしなければならない。I/O ピンがついていない Digispark のためにはんだごてを用意した。

P1130538_mid_640_480

プログラミングは各自のコンピュータで Arduino IDE を使って行った。プリントを用意してサンプルコードを簡単なものから実用的なものまで用意して体験した。

P1130546_mid_640_480

マルチファンクションシールドには 4つの 7セグメント LEDチューブが載っている。この LEDチューブはシフトレジスタ 74HC595を介して接続されている。74HC595は汎用シフトレジスタで、3本のコントロール信号でシリアル信号を8ビットのパラレル信号に変換することができる。マルチファンクションシールドにはこの 74HC595が 2つ搭載されており、ひとつは 7セグメントの形を決め、もうひとつは出力する LEDを決める。

シフトレジスタの使い方とダイナミック点灯の概念を理解するサンプルコードを用意し、LEDチューブの形と点灯させるチューブの選択、ビットパターンの関係を表にしてイメージできるようにプリントを用意した。

P1130548_mid_640_480

P1130542_mid_640_480

「ラボワーク」は毎月第一土曜日の夜やっている。次回は 5月7日(土)の夜、19:00から。詳細は「アドミンティーチャーズ」の Webで。

小学校のカーニバルで「マイコンボードで Lチカ体験コーナー」をする – ブース型の体験コーナーで得たこと

leave a comment »

小学校のカーニバル。子供たちが様々な店を企画してみんなを楽しませる、つまり小学校版の文化祭のようなイベントだ。そこで PTA として「マイコンボードで Lチカ体験」というコーナーを出した。部屋は理科室。実験台に Arduino や Netduino のマイコンボードや部品を並べ、子供たちに体験をしてもらうブース型のコーナーだ。

昨年「青少年のための科学の祭典」で同様の出店をした経験から、このようなスタイルで小学生に体験させるにはどのような工夫が必要なのかということが少しわかった気がする。会議用の長机程度のスペースを使い、椅子をならべて数人を集めてマイコンボードの体験を 10分程度でする、終われば次のグループがどんどんやってきて入れ替わるというスタイルだ。

1.その場でプログラミングは無理

できればその場でプログラミングをし、あるいはコードを書くことはしなくても、できたコードを見せてビルドし配置する、ということを体験させたい。しかしブース型の入れ替え制スタイルで、小学生に対しては無理だ。相手が中学生で、パソコンもマイコンボードの数だけあり、同時に少人数、時間もせめて 20分あればできるかもしれない。したがってその場でプログラミングすることはあきらめ、あらかじめマイコンボードにプログラムを入れておくしかない。したがってイベントの目標は「プログラミングを理解する」のではなく「プログラムによってマイコンボードが動作することを理解する」ことにする。それをどういう形で体験し理解させるかを工夫する。

2.いろいろ用意せず体験は 1種類だけにする

計画の段階では「あれもしたいこれもしたい」と思うので、タイプの異なる実習を何種類も用意しようと思う。興味や関心に応じて選んでやってもらおう、と。しかし完全に個別対応ならうまくいくかもしれないが、5~6名の子供に同時に説明し体験させるには、異なる種類のものを同時に説明するのは無理がある。子供たちをきちんとコントロールできないと事故がおこる可能性もある。体験は 1種類だけにし、応用で見せたいものはすぐできるように用意しておき、見せるだけにする。

3.人数は同時に 10人くらいはできる

きちんと準備ができていれば、小学生なら 10人くらいは同時に対応できることがわかった。同じことをやるなら小学生は友達どうしで見比べながら作業ができる。そのためには机は広いほうがいい。昨年の「青少年のための科学の祭典」では会議用の長机を使ったが、今回は小学校の実験室だったので実験台を使わせてもらった。実験台は奥行きが広いのでマイコンボードや部品を並べても作業に余裕があった。できれば奥行きのある机に輪のようになって座ってするのがいい。

4.直観的に操作できるように準備する

いちいち説明書きを見ながら作業をするのは無理だ。そこで口頭で簡単に説明するだけでいいように、体験は直観的にそうさできるように準備する。回路を作るなら一列に並んだピンに順番にコードを挿していく、3接点のセンサーを使うなら、すだれ型の 3本セットのケーブルを使い、末端には 3ピンのコネクタを取り付けておく、電源のプラスは赤、マイナスは青とブレッドボードの色にあわせておく、などだ。こうしておくと「順番につなぐんだよ」「同じ色をつないでね」「同じ形のところにつないでね」と言うだけでいい。

5.ブレッドボードは難しい

ブレッドボードを小学生に理解させるには、このようなブース型の体験コーナーでは無理だ。まずブレッドボードの内部配線を理解しなければ、どのように回路がつながったのかわからない。実際に小学生にブレッドボードを使わせてみると、LED が光る回路を作ることができても、なぜ光ったかが実感できないでいるようだ。ほとんどの子は光ったことは喜んでも、なんとなく納得しがたい顔をして帰っていく。もし LED を直接光らせる体験をさせたいなら、ブレッドボードは使わずリード線とワニ口クリップを使ったほうがよさそうだ。

6.教材は多めに用意する

きちんと教材を用意しておけば 10人程度は同時に対応できる。スペースに余裕があればもう少し同時に多くに人数でできるかもしれない。そこで教材は想定する数より多めに用意しておくのがいい。また次々にグループがやってきたとき、前のグループでやったものの片付けができていないと待たすことになる。そこで片づけなくても 2回くらいは連続でできるように、同時想定人数の2倍の教材を用意できればさらにいい。

7.電源の管理を工夫する

どのような実習にせよ、マイコンボードや電子回路の実験なら電源を必要とする。回路を組み立てて最後は電源を接続するのだが、AC アダプターを使うのか、乾電池を使うのか、モバイルバッテリーを使うのか。電源ケーブルの引き回しをどうするのか。今回は AC アダプター付きの 7ポート USB ハブを使ったが、USB ケーブルが短くしかも堅かったので使いにくかった。モバイルバッテリーは万一回路が短絡したときに危険かもしれない。電源供給ケーブルのとりまわし、短絡しないケーブル末端の処理、などに配慮する必要がある。小学生には乾電池を使うのがわかりやすく、短絡したときの問題を考えると、内部抵抗の大きなマンガン乾電池を使うことが良いと思われる。

こうした実習は、プランを立ててやってみることで経験が得られ改善の工夫をイメージできる。子供たちは思いもよらない姿を見せてくれる。優れた教員は常に子供たちの様子を観察し、細かな違いを見極める目を持っている。そこで気づいたことを次のプランに組み込んでいく。したがってこうした実践は教える側にとっても貴重な経験である。それにしても小学生に何かを教えるということはエネルギーがいる。やっているときは感じなかったが、2時間ほどの体験コーナーを終えて家に帰ってくると、気が緩んで疲労と睡魔に襲われて夕方まで昼寝をしてしまった。小学校の先生はたいへんだ、ということも実感した。

Netduino で Arduino 用の multifunction シールドを使う(4) – オンボードの 4つの LED を点灯させる

with one comment

前回までに「Netduino で Arduino 用の multifunction シールドを使う(1) – multifunction シールド(Arduino UNO R3 学習向け多機能拡張ボード シールドキット)とは」「Netduino で Arduino 用の multifunction シールドを使う(2) – Microsoft Visual Studio Express 2013 for WIndows Desktop の C# プログラミング環境を整える」「Netduino で Arduino 用の multifunction シールドを使う(3) – Netduino ファームウエアのアップデート」で Visual Studio 2013 で Netduino の開発をする準備を整えた。今回から multifunction シールドを Netduino に接続してプログラミングを始めよう。

P1100621_clip_640_480

Arduino 用 multifuncion シールドにはオンボードに 4つの LED が取り付けられている。基盤には D1、D2、D3、D4 と名前が印刷されているが、これはそれぞれ Netduno の D13、D12、D11、D10 の I/O ピンに接続されている。Arduino では 13、12、11、10 の各ピンだ。

P1100469_clip_640_480

この LED は、I/O ピンから抵抗を介して接続されており、反対側は +5V につながっている。したがってこの LED 光らせるには、各 I/O ピンの出力を 0 に、つまり GND に落とせばよい。

Arduino のスケッチなら、例えば次のようになる。

—————————————————–

digitalWrite(10, LOW);

—————————————————–

ではプログラミングの前に multifunction シールドを Netduino につなごう。両側の各ピンをつなげばいい。つないだら USB ケーブルでパソコンに接続しよう。

P1100622_clip_640_480

P1100624_clip_640_480

P1100619_clip_640_480

multifunction シールドと Netduino の準備ができたら Visual Studio 2013 を起動してプログラムをつくろう。

Netduino_3_001_mid_640

Visual Studio を起動したら、新しいプロジェクトを開始する。

Netduino_3_002_mid_640

テンプレートは言語を Visual C# とし、Micro Framework から Netduino Application (Universal) を選ぶ。Visual Studio のセットアップができていなければテンプレートがないか、または違う名前になっているかもしれない。もしテンプレートが選択できなければ、この blog の前回までの記事を参考にして Visual Studio をセットアップしてほしい。

プロジェクトの名前を適当なものにする。ここでは multifunction_4LEDs_on というプロジェクト名にした。

プロジェクトを開始すると次のような画面になるので、右のソリューションエクスプローラーから、Program.cs をクリックして開こう。

Netduino_3_004_mid_640

Program.cs を開くと、// write your code here の行がある。ここに次のコードを書こう。

——————————————————————

var myLED1 = new OutputPort(Pins.GPIO_PIN_D10, false);

——————————————————————

コード全体は次のようになる。

——————————————————————

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace multifunction_4LEDs_on
{
    public class Program
    {
        public static void Main()
        {
            var myLED1 = new OutputPort(Pins.GPIO_PIN_D10, false);
        }
    }
}

——————————————————————

Netduino_3_006_mid_640

コードが書けたらビルドしよう。ビルドに続いて Visual Studio がプログラムを Netduino に配置してくれる。

Netduino_3_007_mid_640

Netduino_3_008_mid_640

ビルドと配置が完了したら、multifunction シールドの D4 LED 、I/O ポート D10 につながっている LED が光るはずだ。

P1100620_clip_640_480

では次に、4つの LED を全部点灯させよう。コードは次のとおり。

——————————————————————

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace multifunction_4LEDs_on
{
    public class Program
    {
        public static void Main()
        {
            var myLED1 = new OutputPort(Pins.GPIO_PIN_D10, false);
            var myLED2 = new OutputPort(Pins.GPIO_PIN_D11, false);
            var myLED3 = new OutputPort(Pins.GPIO_PIN_D12, false);
            var myLED4 = new OutputPort(Pins.GPIO_PIN_D13, false);        }
    }
}

——————————————————————

Netduino_3_012_mid_640

ビルドして配置すると multifunction シールドのオンボード LED が 4つとも点灯する。

P1100626_clip_640_480

これで multifunction シールドのオンボード LED を点灯することができた。次回はこの LED を点滅させる、いわゆる「L チカ」プログラミングをしよう。

<前の記事>
「Netduino で Arduino 用の multifunction シールドを使う(3) – Netduino ファームウエアのアップデート」