2018年5月20日日曜日

[Jelly Pro] 子ども用の世界最小スマホを作る

子供用の小型スマホを作ります。



子ども用は、
  • 大きい画面だと落としたり、上に乗ったりして割れるし
  • ポケットが小さいので入らないし
  • 大画面でYouTubeばっかり見られても困るので、
画面は小さいほうが都合が良い!

世界最小の4Gスマートフォンに、アームバンドを付けて、子どもが無くしたり、落としたりしないようにします。アームバンドは小学低学年でも合うサイズに調節できました。

Unihertz Jelly Pro

Unihertz Jelly Pro
アームバンド

SIMカードは、イオンモバイルならOKです。割安な「子どもパック」も使えます。

操作画面が小さいので、手書き入力や音声入力も使えるようにします
  • 「Google手書き入力」
  • 「Google日本語入力」の音声入力
  • フォントサイズ最大
  • "OK Google" が使えるように
※イオンモバイル「子どもパック」の初期設定は、フォントサイズ特大だとボタンの位置が画面外になって操作できません。フォント小さめに切り替えます。


Android を子ども用に設定します。
1.Google アクティビティ管理
  • ウェブとアプリのアクティビティをON(利用履歴を親がチェックできる)
  • ロケーション履歴(移動先を親がチェックできる)
  • 音声アクティビティをON(OK Google を使うため)
  • YouTube の検索履歴 OFF(次々と興味のあるコンテンツを表示させない)
  • YouTube の再生履歴 OFF(次々と興味のあるコンテンツを表示させない)

2.検索の設定
  • セーフサーチ フィルタ ON、セーフサーチをロック

3.広告の設定
  • 広告のカスタマイズをOFF(次々と興味のあるコンテンツを表示させない)

4.YouTube の設定
  • 自動再生 OFF(次々と興味のあるコンテンツを表示させない)
  • 制限付きモード ON

5.Google Playストア の設定
  • 保護者による使用制限

2018年4月15日日曜日

Raspberry Pi に、自動で開始するサービスを追加する

Raspberry Pi の起動時に、自動で Bluetooth PAN を開始する

以前はこういう場合は chkconfig コマンドでしたが、Raspbian Stretch だと新しく systemctl を使用します。
https://wiki.archlinux.jp/index.php/Systemd

前記事の Bluetooth PAN のセットアップ スクリプト(bt-pan) であれば、

$ cat /etc/systemd/system/bluetooth-tethering.service
[Unit]
Description=Bluetooth Tethering
After=networking.service bluetooth.service dbus-org.bluez.service

[Service]
ExecStart=/home/pi/bt-pan client 00:00:00:00:00:00
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target


Raspberry Pi の起動時に自動で開始するように、"有効" に切り替えます。
$ sudo systemctl enable bluetooth-tethering

屋外で使用する場合は、Bluetooth テザリングの接続先を準備してから Raspberry Pi を起動する必要があります。

2018年4月14日土曜日

Raspberry Pi を Bluetooth 経由でスマートフォンから操作する

Android タブレットから Raspberry Pi へ Bluetooth で接続して、VNC のリモートデスクトップを操作する方法です。(SSH でも同様に可)

今回使用したもの
  • Nexus 7 (2013)
  • Raspberry Pi Zero WH (Raspbian Stretch with desktop)

Raspbery Pi のうち、Bluetooth を標準装備しているものは BlueZ 等は導入済みであり、追加のパッケージは必要ない。
$ apt-cache show bluetooth
Package: bluetooth
Source: bluez
Version: 5.43-2+rpt2+deb9u2
(以下略)


VNC で接続するためには、Raspberry Pi 側に Bluetooth 経由でアクセスできる IPアドレス が必要になるが、これは Raspberry Pi からタブレットへ、Bluetooth テザリングで接続すれば済む。

■ Android 側での設定
  1. BluetoothをONにする
  2. BluetoothテザリングをONにする
  3. VNC互換のクライアントをインストール
    VNC Viewer - RealVNC Limited

■ Raspberry Pi 側での設定
  1. VNCサーバを「有効」にする
    Raspberry Pi のスタートメニュー > 設定 > Raspberry Pi の設定 > [インターフェース]タブ
  2. BluetoothをONにする
  3. Bluetoothのペアリングを行い、タブレットの Bluetooth と接続する
  4. テザリングを開始する(下記)

まずは、Raspberry Pi でペアリングしたタブレットの Bluetooth デバイスアドレス(BD Address) を確認します。
$ bluetoothctl
以下は bluetoothctl のセッション
# devices
Device 00:00:00:00:00:00 nexus7(これがペアリングしたタブレットのBD Address)
# quit


Raspberry Pi のテザリングを開始するためには、Bluetooth PAN (Personal Area Network) の設定が必要です。GitHub で提供されている Bluetooth PAN のセットアップ スクリプトが使用できます。
https://github.com/mk-fg/fgtk#bt-pan

$ wget https://raw.githubusercontent.com/mk-fg/fgtk/master/bt-pan
$ chmod a+x bt-pan
$ sudo ./bt-pan client 00:00:00:00:00:00(上記 タブレットの BD Address を指定する)
$ ifconfig bnep0
bnep0: flags=4163 mtu 1500
inet 192.168.xx.xx netmask 255.255.255.0 broadcast 192.168.xx.xx
(以下略)

これで Bluetooth PAN で使える IPアドレス(192.168.xx.xx) が有効になったので、タブレットの VNC クライアントからこのアドレスに接続すればOK

Raspberry Pi の起動時に、自動で Bluetooth PAN を開始するには、次の記事を参照
Raspberry Pi に、自動で開始するサービスを追加する

2018年4月10日火曜日

Raspberry Pi で Wi-Fiアクセスポイントの名前が見えない

Raspberry Pi Zero WH で Wi-Fi の SSID 一覧が表示されるが、目的の接続先の名前が表示されない場合の対処について。強引に CLIの設定で乗り切る前に、確認したほうがよい設定ミスの可能性があります。

Raspberry Pi のスタートメニュー > 設定 > Raspberry Pi の設定 > [ローカライゼーション]タブ
・「無線LANの国」を、JP (Japan) に変更

通常の Wi-fi 機器であれば、これで再起動すれば、目的の SSID が表示されるはず。

2018年2月17日土曜日

gem update すると、Unable to require openssl エラー

CentOS7 環境に Ruby on Rails を構築する過程で gem update を行うと、Unable to require openssl エラーが発生した。

■ 今回の作業
  • Ruby と依存関係のあるパッケージを yum install
  • Ruby 2.5.0 を make install(yum のリポジトリだと古いため)
  • gem update

■ エラーメッセージ
# gem update --no-document
Updating installed gems
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources

■ 環境の詳細
  • 環境:DTIのServersMan@VPS CentOS7(64bit版)

直接の原因は、openssl-devel パッケージがインストールされていないことなのだが、手順通り入れたはず。。確認したところ、以下の2つが initscripts が原因のエラーで中断されていた。
  • yum update
  • yum install openssl-devel

■ エラーメッセージ
# yum update
(中略)
Error: systemd conflicts with initscripts-9.49.17-1.el7_0.1.x86_64
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

これは仮想化環境の障害対策として、initscripts パッケージの更新をブロックされているため。
http://www-wp.dream.jp/search.php/?p=23141

メッセージ通り、依存性エラーをスキップしてみると、
  • yum update --skip-broken
  • yum --skip-broken install openssl-devel

ダメだ、openssl-devel は依然として install 完了しない。
DTIでは障害対策として initscripts の update を止めているので、yum を使用して解決することは難しい。
必要であれば、make install か、CentOS6 を選択するしかなさそう。

2018年2月4日日曜日

Raspberry Piで USBスピーカ・マイクを使う

3.5mm ステレオミニプラグで接続するアナログスピーカだと、Raspberry Piでは雑音が大きくて使いにくい。USBであればデジタルで出力できるので、音質を改善できる。

Googleアシスタントで使用するUSBデバイスには設定が必要なのだが、USBサウンドデバイスを複数繋げた場合はどういう名前で認識されたのか分かりにくいので、順にテストすることが必要です。

■ USBスピーカの設定
今回は、「サンワサプライ USBスピーカー(ブラック) MM-SPU8BK」を使います。


USB接続すれば自動で認識されるはず。
認識されたら、カード番号、デバイス番号を確認します。

$ aplay -l
カード 1: MicroII [Audio Advantage MicroII], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0


今回の場合は、「カード 1」「デバイス 0」です。

デバイスをテストします。
$ speaker-test -D plughw:1,0 -t wav

デバイスの指定方法は、
plughw:<card number>,<device number>
なの、今回のUSBスピーカは plughw:1,0 となります。

この内容で、ALSA の設定ファイルに登録します。(下記を参照)

■ USBマイクの設定
今回は、感度高めのコンデンサータイプのマイクを使用します。

サンワサプライ USBマイクロホン MM-MCU01BK


こちらも自動認識されたら、カード番号、デバイス番号を確認します。

pi@raspberrypi:~ $ arecord -l
カード 0: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 0/1
サブデバイス #0: subdevice #0


今回の場合は、「カード 0」「デバイス 0」です。

デバイスをテストします。
$ arecord -D plughw:0,0 test.wav
上記で接続したUSBスピーカに出力してみます。
$ aplay -D plughw:1,0 test.wav

デバイスの指定方法は、同じく
plughw:<card number>,<device number>
なの、今回のUSBマイクは plughw:0,0 となります。

この内容で、ALSA の設定ファイルに登録します。(下記を参照)

■ ALSA(Advanced Linux Sound Architecture) の設定

この内容で、ALSA の設定ファイルに登録します。
シンプルにやるならば、ユーザのホームディレクトリにファイルを作成します。

Configure and Test the Audio
https://developers.google.com/assistant/sdk/guides/library/python/embed/audio

ALSA 設定ファイル
pi@raspberrypi:~ $ cat $HOME/.asoundrc
pcm.!default {
  type asym
  capture.pcm "mic"
  playback.pcm "speaker"
}
pcm.mic {
  type plug
  slave {
    pcm "hw:0,0"
  }
}
pcm.speaker {
  type plug
  slave {
    pcm "hw:1,0"
  }
}

これでデフォルトのサウンドデバイスが指定されたので、
検証してみます。

スピーカーテスト
$ speaker-test -t wav

マイクのテスト
$ arecord test.wav
$ aplay test.wav

これで動作すれば、Googleアシスタントの設定は妥当です。

2017年9月2日土曜日

[VBA] MSAccessテーブルのレコード数を確認する

MSAccessテーブルのレコード数を、Excelにまとめて出力するサンプルです。

Dim Engine As DAO.DBEngine
Dim Database As DAO.Database
Dim TableDef As DAO.TableDef

' 3343 データベースの形式を認識できません エラー対策
Set Engine = CreateObject("DAO.DBEngine.120")
Set Database = Engine.OpenDatabase("データベース.accdb")

Dim RowNum As Long
RowNum = 1

For Each TableDef In Database.TableDefs
  If Left(TableDef.Name, 4) = "MSys" Then GoTo CONTINUE
  ' リンクテーブルは除外
  If Len(TableDef.Connect) > 0 Then GoTo CONTINUE

  Debug.Print TableDef.Name
  Cells(RowNum, 1).Value = TableDef.Name
  Cells(RowNum, 2).Value = TableDef.RecordCount
  RowNum = RowNum + 1

CONTINUE:
Next