投稿

Let's try the MQTT communication!

イメージ
IntroductionThe MQTT communication is major enough to be referred to as the de facto standard as a communication system between IoT devices. I wrote this article for beginners and also as a memo for me.
MQTT (Message Queuing Telemetry Transport) is a communication standard designed as a lightweight protocol which can keep TCP/IP connection even under an unstable state.
This time, we will learn how to perform MQTT communication in a local environment.

In MQTT, as shown below, there are one Broker (server) and multiple Clients. When one of the Clients publish data with a particular topic, another Client which subscribes the topic receives the data.
In order to begin the MQTT, you must make a Broker first.
MQTT is an open communication standard and variety of Broker softwares exist.
I introduce the way to build the Mosquitto environment (the reference MQTT environment) on PCs, Raspberry Pi, and so on, and MQTT applications for mobile and tablets devices.
Windows PCThis section describes…

C言語(4) くり返しと分岐の練習問題 解答例と解説

イメージ
練習問題の解答練習1実行結果が以下のように表示されるプログラムを作ってください。
I have a pen.解答例#include <stdio.h> void main() { printf("I have a pen.¥n"); }解説Hello Worldを表示するプログラムとほとんど同じですね。printf関数の表示内容を"Hello World!¥n"から"I have a pen.¥n"に書き換えただけですね。
練習2実行結果が以下のように表示されるプログラムを作ってください。
I have 2 pens. I have 4 pens. I have 6 pens. I have 8 pens. I have 10 pens.解答例#include <stdio.h> void main() { int a; for(a = 2; a <= 10; a += 2) { printf("I have %d pens.¥n", a); } }解説数値が2から始まり2ずつ増えるようにするためにfor文でくり返しをしています。
まずaの最初の値2をfor文の①の場所に a = 2 と書きます。
次に10になるまでくり返したいので、for文の②の場所にループ条件 a <= 10 を書きます。
くり返す際にaは2ずつ増やしていきたいので、for文の③の場所に a += 2 を書きます。これは a = a + 2 と同じで、「aに2を足した値(=の右側)を新たにa(=の左側)に代入する」という意味になります。C言語で=は「等しい」の意味ではなく、「右の値を左に代入する」という意味になりますので注意してください。

そして、for文の中身として前の問題でも出てきたprintf関数を使います。ここで表示する内容の部分に %d が含まれていることがポイントです。
%dは整数を表示するための記号で、%dの部分をカンマ(,)の次に登場するものの値で置き換えて表示するという意味になります。
カンマの後ろに登場するのはaなので、aの値を%dの部分に当てはめて表示することになります。
これでくり返しの最中に2ずつ…

Visual Studio Code & PlatformIOで快適Arduino開発

イメージ
はじめにArduinoの開発環境として、これまでArduino IDEを使っていましたが、Visual Studio CodeのPlatformIOエクステンションを試したところ非常に使いやすかったので紹介します。
下図の右のような画面構成で、プログラムの編集画面、ツリービュー、コンソール(ログやシリアルモニタ表示)が一体になった開発環境です。
本ページではVisual Studio Code(以降VSCodeと呼ぶ)のインストールからArduinoでLチカを行うまでの方法を説明します。
動作環境以下の環境で動作確認しましたが、Windowsでも同様にできると思います。
項目内容OSmacOS Mojave 10.14.6ArduinoボードNodeMCUボード(ESP8266MOD)その他LED, 150Ω抵抗, ブレッドボード, ワイヤー, MicroUSBケーブルインストールVSCodeはこのページからダウンロードします。
VSCodeを立ち上げ、PlatformIOのエクステンションをインストールします。
私の場合、テキストエディタはVimが使いやすいので、Vimエクステンションをインストールしています。こちらはお好みで。
なお、今回使用したNodeMCUボードはUSB-Serial BridgeとしてCP2102が搭載されているので、CP210x用ドライバのダウンロードページからドライバをインストールしました。
使い方PlatformIOエクステンションをインストールすると左のメニューアイコン部にアリ(?)のマークのアイコンができるので、そこから「Open」→「New Project」とクリックしていきます。
続いてプロジェクトの名前を入力し、ボードを選択します。ボード入力欄に"nodemcu"などのように使用するボード名の一部を入力すると候補が絞られて目的のボードを探しやすくなります。
FrameworkはArduinoとして「Finish」をクリックします。
新規プロジェクトを作ると、空のsetup(), loop()関数が書かれたmain.cppができるので、このファイルを編集していきます。
#include <Arduino.h> int num = 0; void setup() { Serial.begin(9600); …

キーボードの黄ばみ落とし

イメージ
はじめに プラスチック機器(ABS樹脂)の黄ばみを落とすやり方を紹介しているページを見つけ、パソコンのキーボードで試したら見違えるようにきれいになったので紹介します。
上の写真下段の無刻印モデルの方に対し今回黄ばみ取りを実施しました。上段の刻印ありのモデルはほとんど黄ばみは無く、比較のために並べてあります。
下段の無刻印モデルは中古で購入した時点で枠の部分に黄ばみがあり、その後何年も使い続けているので、黄ばみが発生してからかなりの年月が経っていますが、今回の方法で黄ばみがほとんどわからないくらいきれいになりました!
キーボードの分解 まずは全てのキーキャップを外します。外す際はキープラーという専用の道具を使います。簡単な作りの道具なので針金などで自作できそうにも思いますが、数百円で買えるものなので買ってしまった方が良いと思います。
各列のキーキャップは微妙に形状が異なります。無刻印のキーキャップを外すとどの列のものだったのかわからなくなってしまうので、列毎に分けて並べておくと良いです。
外したキーキャップはマイペットのような普通の洗剤でジャブジャブ洗って流水ですすぎました。
続いてキーボード本体を分解します。ネジはたくさん付いていますが、プラスドライバーだけで簡単に分解することができました。
金属部品とプラスチック部品が接する部分にグリスが塗ってあり、漂白液に浸した際に他の部分に付着するのが心配だったので、下の写真の状態から金属パーツを外して、まずは普通の洗剤でジャプジャブ洗いました。
キーキャップをはめる黒い部品やシールなどは外さずに漂白しましたが、私の場合、変色したり剥がれたりするようなことはありませんでした。
灰色のゴムの部品とバネは単に基盤に乗っているだけで簡単にずれてしまうので、そのままそっと保管します。
漂白 過酸化水素と界面活性化剤が入っているものが良いとのことなので家にあった下の写真のものを使いました。最初は漂白剤を節約しようとある程度薄めて試してみましたが、あまり漂白効果が見られなかったので、その後、原液のまま使うようにしました。

漂白剤に浸して紫外線を当てるとABS樹脂の黄ばみが取れるとのことなので、キーボードの枠と裏蓋を下の写真のように漂白液に浸し、日向に半日程度放置しました。
詰め替え用パックのほとんどを使ってしまう量が必要です。(^^;

LINE Clovaを使って声でobnizを動かす

イメージ
はじめに小型のIoTボードobnizとスマートスピーカーLINE Clovaを連携させ、声でobnizを動かす試行を行いました。
モーターやLEDを声で操作でき、アイディア次第で色々な工作に使えると思いますので、メモとして残します。
使用したものobnizLINE Clova Friends MiniLED 緑、黄、赤抵抗 150Ω(黄、赤用)、100Ω(緑用)サーボモーター SG90DCモーター(羽根を付けて扇風機にする)ブレッドボード、配線緑のLEDにつなげる抵抗のみ100Ωにしたのは、150Ωでは明るさが足りなかったため、少し抵抗値を下げて明るくしたためです。
ハードウェアの準備下図のようにobnizとサーボモーター、DCモーターおよび3色のLEDを接続します。
そしてobniz、ClovaともWifiに接続していることを確認します。
Clovaスキルの作成Clova Developer Center βをブラウザで開き、「スキルを開発する」を押します。スキルとはスマートスピーカーのプログラムのことです。
LINEアカウントでログインします。
「LINE Developersでスキルチャネルを新規作成」を押します。 任意の名前でプロバイダーを作成します。以下の例ではdemo-providerという名前で作成しました。
 任意の名前でチャネルを作成します。以下の例ではspeech-demoとしました。
 同意を求める欄にチェックを入れ、「スキル開発を始める」を押します。
以下のように基本情報を設定します。
項目設定内容Extension IDcom.speech-demo.myserviceスキル名スピーチデモ呼び出し名(メイン)スピーチデモ呼び出し名(サブ)スピーチでもAudioPlayerの使用いいえ提供者区分個人提供者名自分の名前担当者メールアドレス自分のアドレスEstensionと連携するLINEのアカウント選択しない”スピーチ”は恐らく他の単語に間違われることは無いと考えましたが、後から思えば、”酢ピーチ”などをサブに入れても良かったかもしれません。 ”デモ”は接続詞としての”でも”と捉えられるかもしれないと思ったので平仮名にした”スピーチでも”をサブの呼び出し名として登録しました。 「対話モデル」→「対話モデルを編集する」から対話モデルの作成を始めます。
まず、スロット…

GR-ADZUKI & BlocklyDuino ブロックプログラミングでチキンレース

イメージ
はじめに がじぇるねGR-ADZUKI(Arduino互換ボード)とミニ四駆を使ったチキンレースに挑戦した際のメモです。
チキンレースとは、ミニ四駆などの車を壁に向かって走らせ、壁に衝突せずに最も壁の近くで止められた人が勝ちというレースです。
小学校の放課後教室向け題材とするため、ブロックプログラミングで行うことを前提にしていましたが、がじぇるねのページにあるS4AではUSBケーブルでパソコンとつないだ状態でしか動かせず、チキンレースには不向きであることがわかりました。
そこで、他に何か良いツールがないかを探したところ、ChromeアプリのBlocklyDuinoを見つけ、ブロックプログラミングで作成したプログラムからIDE for GR用C言語コードを生成してGR-ADZUKIのスタンドアロン動作に成功したので紹介します。

使用したものパソコン(MacまたはWindows)GR-ADZUKI(http://gadget.renesas.com/ja/product/adzuki.html)ミニ四駆距離センサー GP2Y0A21YK(http://akizukidenshi.com/catalog/g/gI-02551/)乾電池2本配線コードUSB MicroBケーブル輪ゴム レースカーの作成 ミニ四駆は電源スイッチONでモーターと電池が直結されモーターが回るので、GR-ADZUKIから制御できるようにモーターと電池の間の接続を途中で切って配線を引き出す必要があります。
下図のL字に曲がっている箇所を何度か折り曲げて切断します。
切断した箇所が誤ってショートしないように少し短くします。
反対側も同様に切断したあと、配線が下図の向きに出るようにハンダ付けします。
配線はそれぞれ違う色にしておくとつなぎ間違いの防止になります。
モーター側の配線(上図、上の2つ)はお好きな色で良いでしょう。
電池の配線(上図、下の2つ)は重要で、プラスとマイナスを間違えてしまうと最悪の場合ボードを壊してしまう可能性があるため注意が必要です。電池のプラス側の配線は赤、マイナス側を黒としておくのがおすすめです。

これらをミニ四駆にはめ込むと下図のようになります。
モーターとギアを取り付けると以下のようになります。
これにギアを固定する部品(青)を取り付けます。この時、下図の矢印の箇所から…