1

モウフカブール
大澤文孝

2

大澤文孝
テクニカルライター／システムエンジニア／プログラマ／インフラエンジニア。
著書はもうすぐ100冊。100冊記念パーティーやりたい（けど反対されている）。

3

主な著書

もうすぐ100冊パーティーやりたい！

今日のお話は電子工作

毎月18日発売月刊I/O 6月号

振るとプレゼンテーションが進む

BLEキーボードとして動作GitHubでライブラリが公開されているおかげ
こうした短いコードで書けるのは、ライブラリ作者さんのおかげ。
BLE、Wi-Fi、各種センサー、グラフィック処理、さまざまなライブラリが、オープンソースで提供されている。
皆様に感謝！

アジェンダ• マイコン電子工作の基本
Arduinoについて
マイコンの基礎• 液晶付きマイコン• Groveでカンタン電子工作• PCとつなぐには• TWELITEでカンタン、トイレIoT

マイコン電子工作の基礎（Arduinoの場合）

Arduinoについて

Arduinoについてアルディーノ。ワンボードマイコン。
2005年イタリアにて生まれた。
いろんな種類があるが、一般的なのは「Arduino UNO」。
オープンハードウェアであり、派生・互換機がたくさんある。

Arduino言語
C言語に似た言語。setup関数に1回だけ実行したい処理を書く。loop関数に繰り返し実行したい処理を書く（一般には、loop関数内にsleepを書くことが多い）。
void setup() {// 初期化処理を書く}
void loop() {// 繰り返し実行する処理を書く}// sleep(1000);

1秒待ちなどすることが多い

Arduino IDE
Arduinoを開発する統合開発環境。

いろんなマイコンボードがArduinoに対応する
Arduino IDEは、拡張することでさまざまなマイコンに対応可能。M5Stackなどの液晶付きマイコンなども、Arduino IDEで開発できる。

Arduino対応マイコンをはじめるには「Get Started」
PCを用意などを参考に！
Arduino IDEをインストール
ボードマネージャをインストール

ソースを書いてビルド
PCとUSBで接続して書き込み「Lチカ」のサンプ
ルをまず試そうマイコンの基礎マイコンがやってることGPIOに接続した何かをごにょごにょしている。
LED
スイッチ
センサー
マイコン

GPIO

モーター
ドライバ

モーター

A/D

スピーカー

D/AマイクGPIO

部品

プラスマイナス

ブレッドボードで電子工作ブレッドボードと配線つないだところ
GND（マイナス）
13番

Lチカのプログラム
pinModeで入出力の向きを設定
digitalWrite/digitalReadで制御
void setup() {pinMode(13, OUTPUT);}
void loop() {digitalWrite(13, HIGH);delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

出力に設定

オンにオフに

液晶付きマイコン

液晶付きマイコン

M5Stack

Wio Terminal

JPEG表示OK。日本語表示OK
らびやんさんのLovyanGFX。
microSDに格納したJPEGファイルを表示したり、日本語表示したりできます。
https://github.com/lovyan03/LovyanGFX

配線って大変だよね
スイッチ、スピーカー、マイク…。赤外線送信まで、いろいろ付いています。

液晶付きマイコンは、単品でかなり使える！

Wi-FiやBLEに対応
ネットワークで操作できる
PCからコマンドをTCP/IPで送信
ブラウザでアクセスしてセンサの値を見る
BLEが使えるPCのキーボードやマウスになる
BLEでセンサのデータを読み書きできる

Groveでカンタン電子工作配線するのが基本
温度センサ、音センサ、人感センサ、モーター、などなど…

Grove例）温度・気圧センサ（BMP280）

4ピンの専用コ
ネクタで接続

マイコン側の接続

Grove端子につなぐ

Groveをつなぐためのシールド

4ピンの端子で接続
3種類ある。
①アナログ
A/Dに接続するもの②デジタル
デジタルに接続するもの③I2C
I2Cに接続するもの「3.3V」「5V」の別があるので注意。

I2C
フィリップ社が開発した規約。「SCL」と「SDA」で転送する。
デバイスにIDが付いていて、コマンドが決まっている。デバイスIDにコマンドを送信すると、そのコマンドを応じて、デバイスが動く。
・デジタルのセンサ、液晶画面などに採用されている

たくさんあるGrove
スイッチサイエンスのWebサイトより

サンプルコードが豊富
もうデバイスのデータシートを眺めなくてよい。ライブラリ化されたオープンソースのコードがある。
それ使うだけで済むので、Groveデバイスあるなら、それを使えば、とってもカンタンになる！

M5Stackで温度センサを作る#include <M5Stack.h>#include "Seeed_BMP280.h"
BMP280 bmp280;
void setup() {M5.begin(); Wire.begin();bmp280.init();}void loop() {float t, p;
t = bmp280.getTemperature(); // 温度
p = bmp280.getPressure(); // 気圧
char msg[20];sprintf(msg, "%2.2f C %f Pa", t, p);
M5.Lcd.drawCentreString(msg, 160, 120, 2);delay(10000);
m5.update();}

抜粋ではない。
ホントにこれだけPCとつなぐには？

PCにつなぐ方法①BLE
BLEデバイスとしてPCから参照。
BLEキーボード、BLEマウスなどとして動作させる②USB
USBデバイスとしてPCから参照。
USBキーボード、USBマウスなどとして動作させる③Wi-Fi
マイコンをWebサーバーなどとして構成。

Webサーバとして使う
ブラウザでアクセス（http://XXX.XXX.XXX.XXX）

温度を含むHTMLページを返す

Webサーバーのプログラム

Webサーバーにするコード（抜粋）// SSIDとキー
const char SSID[] = "SSIDを記入";
const char WIFIKEY[] = "暗号化キーを記入";// WebServerオブジェクト
WebServer server(80);void setup() {…略…
WiFi.begin(SSID, WIFIKEY); // アクセスポイントに接続
while (WiFi.status() != WL_CONNECTED) {delay(1000);}…略…
server.begin();}HTMLを返すコード
server.on("/", HTTP_GET, []() {// 温度・気圧の取得
float t = bmp280.getTemperature();float p = bmp280.getPressure();char msg[256];
sprintf(msg, "%2.2f C %f Pa", t, p);server.send(200, "text/html","<html><head><meta charset='utf-8'></head>""<body><h1>温度</h1>" +String(msg) +"</body></html>"
センサの値を埋め);込んでHTMLを返});すように作るTWELITE

TWELITEって何？
モノワイヤレス社の無線マイコン。DIP型（ICのかたち）の
TWELITE DIPやセンサーのPAL、小型のCUE、パソコンと接続するMONOSTICKなどがある。

DIP

PAL

CUE

MONOSTICK

基本機能
2台買ってきて、片方にスイッチ付ける、もう片方にLED付ける。
電池をつなげば、片方をオンにしたとき、LEDが光る。
到達距離は最大1kmとされている。

無線スイッチオン

LED光る

MONOSTICKでPCから制御
PCにMONOSTICKを使う。COMポート（シリアル）として見える。
シリアルに文字列を送信すると、無線信号を出して、LEDとか光らせられる。

無線

コマンド送信LED光る

TWELITE CUE
マグネットスイッチと加速度センサを搭載したTWELITE。
MONOSTICKでデータを読み取れる。

トイレIoTすぐ作れる
ドアにTWELITE CUEとマグネットを取り付ける。パソコンにはMONOSTICKを付ける。
磁石

TWELITE CUE

こんなプログラムでOK
import sys
sys.path.append('./MNLib/')from apppal import AppPAL
port = 'COM3' // 環境に合わせる
PAL = AppPAL(port = port)# データの取得
while True:
if PAL.ReadSensorData():# 届いているなら、値を取得して表示
data = PAL.GetDataDict()
if data['HALLIC'] < 10:
print("開閉発生");del PAL

Raspberry Piでセンサーサーバを作る
Raspberry PiでWebサーバーとなるPythonのプログラムなどを作ってPC・スマホからアクセスする。
トイレ個室①無線
トイレ個室②
ブラウザ
でアクセスセンサーから値を取得する
プログラム
Webサーバー

トイレ個室③

マイコンのプログラムは自作できる（上級者向け）プログラムは書き換えることができる。動作をカスタムできる。

TWELITE STAGE BOARDでGROVEもつなげる

IoTに向けて（次回予告）

インターネットにサーバを構築してデータを転送する

MQTT、クラウド、サーバレス、IoTサービス…

次回予告
OSC2021 Online/Hokkaido
2021年6月26日（土） 12:00～
https://event.ospn.jp/osc2021-onlinedo/session/366962
また来月お会いしましょう。

今後の活動モウフカブール

小笠原種高

大澤文孝

モウフカブール
http://mofukabur.com/

同人活動
次回技書博は6月19日
https://gishohaku.dev/
大田区産業プラザ 大展示ホール
音楽CD（デバッグ音頭）
モウフカブール（http://mofukabur.com/）
アレクサでも聴けるよ

技術書典、技術書博覧会（技書博）、コミケなどで活動中。
技術同人のほかの音楽CD、写真集などを頒布しています。

技書博新刊
明後日シリーズ最新刊
明後日から使えるKubernetes入門

Kubernetesとは何かをゆるく解説技書博新刊
空飛ぶエンジニア用語辞典
いまさら聞けない用語を解説。
これで知ったかぶりができる、そんな用語集。
フレームワークとライブラリの違いは？
CDNって何？
機械学習で何ができるの？などなど、いまさら聞けない疑問をまとめていますhttp://bit.ly/OSC2021Nagoya_Form

Follow me@sour23

http://bit.ly/OSC2021Nagoya_Form
電子工作

Follow me@sour23

センサーとクラウドhttp://bit.ly/OSC2021Nagoya_Form
AWSで学ぶdocker入門書

Follow me@sour23