■
IchigoJam のシリアル接続
参考サイト
親子でベーシック入門 IchigoJamではじめてのプログラミング p144
IchigoJam のモータ制御
モータドライバ IC の TA7291P を用いてモータの回転方向、回転速度を制御する。
IC 端子概要
ICピン番号 | 端子記号 | IchigoJam | モータ | 電池 | IC端子説明 |
---|---|---|---|---|---|
1 | GND | GND | --- | マイナス極 | GND |
2 | OUT1 | --- | モータ端子 | --- | 出力端子 |
3 | 未使用 | --- | --- | --- | --- |
4 | Vref | OUT5 | --- | --- | 制御電源端子 |
5 | IN1 | OUT1 | --- | --- | 入力端子 |
6 | IN2 | OUT2 | --- | --- | 入力端子 |
7 | Vcc | 5V | --- | --- | ロジック側電源端子 |
8 | Vs | --- | --- | プラス極 | 出力側電源端子 |
9 | 未使用 | --- | --- | --- | --- |
10 | OUT2 | --- | モータ端子 | --- | 出力端子 |
結線図
基本プログラム
回転方向:正転
回転速度:100%
OUT 1,1:OUT 2,0 PWM 5,2000
回転方向:逆転
回転速度:50%
OUT 1,0:OUT 2,1 PWM 5,1000
回転方向:停止
回転速度:停止
OUT 1,1:OUT 2,1
回転制御なし
上記結線図から 4 番ピン~OUT5 を外すと、回転速度は常に 100% となる。
ICピン番号 | 端子記号 | IchigoJam | モータ | 電池 | IC端子説明 |
---|---|---|---|---|---|
4 | Vref | OUT5 | --- | --- | 制御電源端子 |
参考サイト
スマートスピーカでTVチャンネル操作
コマンドの改良
スマートスピーカとRaspberry Piを連携する - 作業日記@HatenaBlog では、broadlink-cli コマンドを Node-RED の exec にフルで記入していた。 これを短縮形に改良する。
シェルスクリプトの作成
$ cd /home/pi/python-broadlink/cli $ vi ircmd.sh #!/bin/sh cd /home/pi/python-broadlink/cli ./broadlink_cli --device @ROOM.device --send @$1 $ chmod u+x ircmd.sh
動作確認
以下のコマンドを実行して、電灯がオンオフするか確認。
$ cd /home/pi/python-broadlink/cli $ ./ircmd.sh LIGHT.on $ ./ircmd.sh LIGHT.off
Node-RED の exec ノードを編集
コマンド欄は ircmd.sh のフルパスを、引数は LIGHT.on のみ記述する。(電灯オンの場合)
他の exec ノードも同様に修正する。
- 修正前
- 修正後
参考サイト
スマートスピーカとRaspberry Piを連携する
概要
- Amazon Alexaを使って家電操作をする
- eRemote mini ( RM mini 3 )を使用する
- Raspberry Pi 3を使用する
- Node-REDを使用する
Raspberry Piの準備
gitをインストールする
$ sudo apt-get install git
gitからpython-broadlinkをダウンロードする
$ git clone https://github.com/mjg59/python-broadlink.git
pipをインストールする
$ sudo apt-get install python-dev $ sudo apt-get install python-pip $ sudo pip install broadlink
RM mini 3の準備
ネットワーク上にあるRM mini 3を探索する
(前提として、スマホアプリでRM mini 3の無線LAN設定まで終わり、家庭内LANにつながっているものとする)
$ cd ~/python-broadlink/cli $ ./broadlink_discovery Discovering... ########################################### RM2 # broadlink_cli --type 0x2737 --host 192.168.ppp.qqq --mac XXXXXXXXXXXX Device file data (to be used with --device @filename in broadlink_cli) : 0x2737 192.168.xxx.yyy XXXXXXXXXXXX temperature = 0.0
探索結果を保存する
$ cd ~/python-broadlink/cli $ vi ROOM.device 0x2737 192.168.xxx.yyy XXXXXXXXXXXX ← 探索結果のうちこの1行を保存
リモコン学習をさせる(照明器具でテスト)
$ cd ~/python-broadlink/cli $ ./broadlink_cli --device @ROOM.device --learnfile LIGHT.on (RM mini3に向けてリモコンのONボタンを押す) $ ./broadlink_cli --device @ROOM.device --learnfile LIGHT.off (RM mini3に向けてリモコンのOFFボタンを押す)
動作テスト
$ cd ~/python-broadlink/cli ./broadlink_cli --device @ROOM.device --send @LIGHT.on ./broadlink_cli --device @ROOM.device --send @LIGHT.off
node-REDの準備
node-REDのインストール
$ sudo npm install -g --unsafe-perm node-red
node-REDを起動
$ node-red-pi --max-old-space-size=256 2 May 14:28:00 - [info] Welcome to Node-RED =================== 2 May 14:28:00 - [info] Node-RED version: v0.18.4 2 May 14:28:00 - [info] Node.js version: v8.11.1 2 May 14:28:00 - [info] Linux 4.14.37-v7+ arm LE 2 May 14:28:02 - [info] Loading palette nodes 2 May 14:28:05 - [info] Settings file : /home/pi/.node-red/settings.js 2 May 14:28:05 - [info] User directory : /home/pi/.node-red 2 May 14:28:05 - [warn] Projects disabled : set editorTheme.projects.enabled=true to enable 2 May 14:28:05 - [info] Flows file : /home/pi/.node-red/flows_raspberrypi.json 2 May 14:28:06 - [info] Creating new flow file 2 May 14:28:06 - [info] Starting flows 2 May 14:28:06 - [info] Started flows 2 May 14:28:06 - [info] Server now running at http://127.0.0.1:1880/
アクセステスト
ブラウザを立ち上げて http://192.168.xxx.yyy:1880/ アクセスする node-REDのページが表示されたら成功
node-REDの停止
ctrl+Cを押下するとストップする ^C2 May 14:28:57 - [info] Stopping flows 2 May 14:28:57 - [info] Stopped flows
自動起動の設定
sudo systemctl enable nodered.service
Node-RED Alexa Home Skill Bridgeのセットアップ
- Node-RED Alexa Home Skill Bridgeにアクセスして Register からユーザ登録する
- Devices → Add Deviceで新しい機器を登録する
- デバイス登録
- Name: と Description: には自分が分かりやすい名前を付ける
ここで付けた名前は (1)Amazon Alexa アプリのスマートホームデバイス、(2)Node-Red の呼び出しで使われる - Amazon Echo から呼び出す名前は、後から Amazon Alexa アプリで変更可
- リビングの照明をオン、オフする → ON: OFF: にチェックを付ける
- 明るくする、暗くする → +%: -%: にチェックを付ける
- Application Type → LIGHT: にチェックを付ける
- 登録例
- Name: と Description: には自分が分かりやすい名前を付ける
- 登録完了
スマートホームスキル(Node-RED)とデバイスを追加する
- スマホの Amazon Alexa アプリ または https://alexa.amazon.co.jp/ を使う
- スキルで「Node-RED」を検索
- Node-RED Alexa Home Skill Bridge のログイン画面が表示される
- 上記で登録した ID とパスワードでログインする
- デバイスが検出された
Node-RED と Alexa を連携させる
- ブラウザから http://192.168.xxx.yyy:1880/ へアクセスして Node-RED の画面を表示
- 画面右上の メニューから、パレットの管理 → パレット → ノードの追加 を選択
- 「alexa-home」で検索し「node-red-contrib-alexa-home-skill」が表示されたら「ノードの追加」を選択
- 「現在のノード」に Alexa 用パレットが追加された
Node-RED で家電操作のフローを作成する
- 上記のパレット追加画面で [閉じる] ボタンを押して、トップ画面へ戻る
- 左メニューの一番下に alexa が追加されているのを確認する
- 左側の alexa home を右側へドラッグ&ドロップする
- 右側の Alexa Home をダブルクリックすると、以下のウィンドウが出る
- Account 欄の右端 マークをクリック
- Node-RED Alexa Home Skill Bridge に登録したアカウントを入力する
- しばらく待つと Device 欄に「照明」が表示される
(表示されないときは削除して再作成する)
- アイコン名が「Alexa Home」から「照明」に変わるので、その右隣に「switch」を配置する
- switch をダブルクリックして編集ウィンドウを表示
「==」を選択して、「is true」「is false」の2つを作って「完了」する
- switch の右隣に、左側メニューの「vその他」から「exec」を2個配置する
- exec のうち1つをダブルクリックで開いて以下を入力する
- 「is true」側に LIGHT.on を接続する
- 「is false」側に LIGHT.off を接続する
- 右上の「デプロイ」ボタンを押して保存する
動作テスト
- 「アレクサ、照明をつけて」→ LIGHT.on
- 「アレクサ、照明を消して」→ LIGHT.off
参考サイト
Raspberry Pi 3 model B のセットアップ
OS のダウンロード・インストール
- SD カードをフォーマットする
「SDメモリカードフォーマッター 5.0」を使用する。
SDメモリカードフォーマッター - SD Association - フォーマットソフトを起動
フォーマットオプション:上書きフォーマット
[フォーマット]ボタンを押下 - NOOBS 版をダウンロードする
Download NOOBS for Raspberry Pi
本稿執筆時は 2018-04-18, ver.2.8 - ダウンロードした zip ファイルを解凍し、SDカードへコピーする
- SDカードをRaspberry Pi 3本体に挿入して起動する
予めキーボード、マウス、ディスプレイ、電源などは用意しておくこと - 画面下にあるバーで日本語を選択する
- Raspbian を選択してインストール開始
- インストール完了後、再起動する
環境設定
Wi-Fi情報の設定 SSIDとパスワードからパスフレーズを作成する。 Wi-Fi設定ファイルに追記する。
$ sudo wpa_passphrase "SSID名" xxx...xxx | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
Wi-Fi設定ファイルを編集する
$ cd /etc/wpa_supplicant $ sudo vi wpa_supplicant.conf ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid=”myhome_ssid” ← 接続する予定のWi-FiのSSID #psk=”xxx...xxx” ← 元のパスワード。※※※最後に消す※※※ psk=yyy...yyy ← 暗号化されたパスワード key_mgmt=WPA-PSK proto=RSN ← WPA2の場合はRSN、WPAの場合はWPA pairwise=CCMP group=CCMP priority=0 }
設定の再読込
$ wpa_cli -i wlan0 recocnfigure
ネットワークアドレスを固定化する
$ sudo vi /etc/network/interfaces auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 192.168.xxx.yyy ← 割り当てたいIPアドレス netmask 255.255.255.0 gateway 192.168.xxx.1 wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
SSHサーバの有効化
$ sudo raspi-config 8 Advanced Options → A4 SSH → Enable → 再起動する
SSHが途中で切れないように維持する
$ sudo vi /etc/ssh/sshd_config ClientAliveInterval 30
トラブルシュート
RFKillで無線LANがロックされたとき
$ rfkill list all 0: phy0: Wireless LAN Soft blocked: yes Hard blocked: no 1: hci0: Bluetooth Soft blocked: no Hard blocked: no $ rfkill unblock wifi
Wi-Fiの接続状況を確認するとき
$ iwconfig wlan0 $ ifconfig wlan0
wlan0のデバイスをオン、オフするとき (ifdown, ifup が使えない)
$ sudo ip link set wlan0 down $ sudo ip link set wlan0 up $ sudo ifdown wlan0 ifdown: unknown interface wlan0
参考サイト
- Raspberry Pi 3(RASPBIAN JESSIE)OSインストールから初期設定【セットアップ前編 】 - 環境構築メモ
- ラズパイZERO WHを購入したのでRaspbian入れてみた(OSインストールメモ) | コロロング
- Raspbian のWi-Fi設定(Raspberry Pi 初期設定) │ ラズパイダ
- raspberry Pi3に複数のwifiへ自動接続してもらう | かめねこ記録
- Raspbian Stretch Lite で突然無線LANに接続不能になったとき - ながいものには、まかれたくない
- Wifi on Raspberry Pi 3 – The Accidental Developer
- Setting WiFi up via the command line - Raspberry Pi Documentation
- Raspberry piで先にやること - Qiita
- RaspberryPiの日本語設定 - uepon日々の備忘録
- Raspberry Piのセットアップ(ssh接続まで) - Qiita
Excel ユーザ定義関数による JAN コード生成
JAN コード
集合包装用商品コード(ITFコード)(14桁)を使った場合。参考サイト
関数種類
- JAN()
JANコード(14桁)の数値を返す。
引数:13桁の数値(Double),返り値:14桁の数値(Double) - SJAN()
JANコード(14桁)の文字列を返す。
引数:13桁の数値(Double),返り値:14桁の文字列(String) - JAN_CHKD()
JANコード(14桁)のチェックデジット(末尾1桁)を返す。
引数:13桁の数値(Double),返り値:1桁の数値(Integer)
追加方法
- エクセルを起動
- 空白のブックを作成する
- Alt + F11 を押下
- メニュー「挿入(I)」→標準モジュール(M)
- 下記のソースコードを貼り付け
- マクロ有効ブック(.xlsm)で保存する
ソースコード
'先頭宣言 Option Explicit ' 'JANコード生成(文字列型) '2018-04-23 ' 'ITFコードに基づくJANコード(14桁)を生成する '13桁の入力値から末尾にチェックデジット1桁を付加して14桁の文字列を返す ' '1)入力値が13桁数値か判定する → それ以外はエラー終了 '2)入力値を桁分解して配列変数「桁分解(n)」へ格納 ' 一位→桁分解(2) ' 十位→桁分解(3) ' 百位→桁分解(4) ' … ' 一兆位→桁分解(14) '3)偶数桁 桁分解(n) n=14,12,10,8,6,4,2 を合計して3倍する '4)奇数桁 桁分解(m) m=13,11, 9,7,5,3 を合計する '5)上記3)と4)を合計する '6)上記5)の下1桁の数字を10から引く → 桁分解(1)に格納する(チェックデジット) ' ※下1桁がゼロで 10 - 0 = 0 のときは、桁分解(1)にゼロを格納する ' Function SJAN(入力値 As Double) As String '変数定義 Dim 文字列化 As String Dim 桁分解(14) As Integer Dim i As Integer Dim 偶数桁 As Integer Dim 奇数桁 As Integer '再計算の有効化 Application.Volatile '入力値は13桁を超過しているか '超過した場合は #NUM! を返す If Len(CStr(入力値)) > 13 Then SJAN = CVErr(xlErrNum) Exit Function End If '入力値を13桁に揃える '文字列に変換する 文字列化 = Right("0000000000000" & CStr(入力値), 13) '配列変数「桁分解(n)」に格納する ' For i = 14 To 2 Step -1 桁分解(i) = Val(Mid(文字列化, 15 - i, 1)) Next i '偶数桁を合計して3倍する 'Σ桁分解(n) n=14,12,10,8,6,4,2 For i = 2 To 14 Step 2 偶数桁 = 偶数桁 + 桁分解(i) Next i ' 偶数桁 = 偶数桁 * 3 '奇数桁を合計する 'Σ桁分解(n) n=13,11,9,7,5,3 For i = 3 To 13 Step 2 奇数桁 = 奇数桁 + 桁分解(i) Next i '桁分解(1)にチェックデジットを保存する ' 桁分解(1) = 10 - Val(Right(CStr(偶数桁 + 奇数桁), 1)) If 桁分解(1) = 10 Then 桁分解(1) = 0 'JANコードを返す ' For i = 14 To 1 Step -1 SJAN = SJAN & CStr(桁分解(i)) Next i End Function ' 'JANコード生成(数値型) '2018-04-23 ' 'ユーザ定義関数JANSへ入力値を渡し、返り値(文字列)を数値へ変換する ' Function JAN(入力値 As Double) As Double JAN = Val(SJAN(入力値)) End Function ' 'JANコード チェックデジット生成 '2018-04-23 ' 'ユーザ定義関数JANSへ入力値を渡し、返り値(文字列)の下1桁を抽出して数値化する ' Function JAN_CHKD(入力値 As Double) As Integer JAN_CHKD = Val(Right(JAN(入力値), 1)) End Function
OpenVPNを利用したPIA
PIA純正アプリ
インストール時にエラー発生
WARNING: By default, this session does not use any encryption whatsoever. Please do not use it to send sensitive data unless you are sure your connection is secure (by using an encryption plugin, for instance).
- PIA managerが非英語環境でインストールできない(ruby周りで異常)
https://www.privateinternetaccess.com/forum/discussion/27085/ruby-exe-problem - PIA公式サイトを確認するとOpenVPNを使うよう指示あり
https://www.privateinternetaccess.com/pages/client-support/windows-openvpn - 新たにOpenVPN GUIをDL、インストールした
Installer (64-bit), Windows Vista and later
https://swupdate.openvpn.org/community/releases/openvpn-install-2.3.18-I602-x86_64.exe - PIA接続用のOpenVPN設定ファイルをDL、展開した(上記2.の公式サイト指示)
https://www.privateinternetaccess.com/openvpn/openvpn.zip - サクラエディタのGrep置換を使って *.ovpn ファイル中のauth-user-pass の行を
auth-user-pass auth.txt へ一括置換した
https://faq.interlink.or.jp/faq2/View/wcDisplayContent.aspx?id=857
http://proengineer.internous.co.jp/content/columnfeature/5438 - さらに *.ovpn ファイルの最下行に auth-nocache を追加した
(置換前) disable-occ
(置換後) disable-occ\nauth-nocache
Grep置換は正規表現で実行すること(改行コードは LF ) - PIA接続用のユーザ名、パスワードを記述した auth.txt ファイルを作成した
- OpenVPNの設定フォルダに auth.txt をコピーした
コピー先 C:\Program Files\OpenVPN\config\ - OpenVPNの設定フォルダに *.ovpn ほか全ファイルをコピーした
コピー先 C:\Program Files\OpenVPN\config\ - 完了
IchigoJam T の画像
基本イメージ
プレーンボード