2018年12月22日土曜日

ダイエットして気づく腹回りの余った皮

風呂上り、上半身裸でプランク(腕立て伏せみたいな体制で体をまっすぐ伸ばす筋トレ)したら腹回りが視界に入りました。
そこにはたぷんたぷんの皮があって、いろんな部位の脂肪が流れ溜まってましたw

 「こいつはダイエット前の体系を維持するために伸びた皮だ」

なんとかせねば・・・!

調べによると、腹回りの皮は1年で約2cmしか上下しないようです。
つまり体系って意外と変化に弱く
急激に筋肉つけば皮に線が入ったりするし、
急激に減れば皮がたぷんたぷんになることが分かります。

今の自分の現状にあてはめると、
10kg減ってこぶし2つ分、ベルト穴3つ分くらい変動したので
1年でベルト穴1つ分皮が縮むとすると、
腹回りの皮が今の体系に戻るのは3年先だというのが分かりますww

逆算していくと、、、、、

ダイエットしたい!って思ってる方に朗報!!

 「1年でやっていいダイエット上限(推奨)値はおおよそ5キロまで」

 それ以上は無駄に余った皮を見る事になります。
※もし10キロダウン目指してるなら1年で5キロダウンを目指し、2年計画で緩やかに落とそう。

ライザップで糖質制限って話題になったてたけど、これも実践してやるかやるかやるか…の問題。
それにダイエットもいろんなやり方があり10人十色。
糖質ダイエットだけがダイエットではなく、
自分は食生活のスタイルはそのままで好きなお菓子もアイスも食べて体重落としてますw

2018年11月14日水曜日

[AtmelStudio]クロックの設定

ATMEL SAMD21マイコンを使う上で必ず最初に設定しなければならないクロック設定。

USBホスト機能やUART回りを使うなら外部クリスタル発振子を使った方が断然よいので
今回は外部クロックを使用した場合の例です。

クロック設定例


まず最初に使うコンポーネントを追加します。
次にどのオシレータを使うか設定で、内臓8Mと外部32.768kHzのオシレータにチェック入れてから
内臓8MHzは400kHzに分周して、FDPLLで48MHzを生成します。

ソースクロックで入力するオシレータを選択していきます。
GCLK0は48MHz、GCLK3は400kHzを設定すればクロック設定終了です。


ちなみに内臓クロックの精度はこちら。
https://cdn-shop.adafruit.com/product-files/2772/atmel-42181-sam-d21_datasheet.pdf
Page972参照





2018年11月13日火曜日

【ARM】高機能JTAG、BlackMagicProbeクローンを激安STM32F103C8T6マイコンで作る。



このBlackMagicProbeというものは、ARMなCortexシリーズ用のJTAG/SWDデバッグアダプタで、通常デバッガはOpenocdを使う所をgdb使うようにしたものです。
デバッガをGDBにしたことで、FreeRTOSなどでいろんなスレッドに飛ばされたりしたときにも細かくトレースできて高速、というのがウリのようです。
もう1つ良い点は、これ1つ持っていれば各社ARMマイコンと各社専用のJTAG/SWDアダプタを買わずに済むというメリットがあります。

そんなBlackmagicProbeですが、オープンハードウェアでオープンソースなので自由にクローンが作れます。

サイトは以下URL.


あまりメジャーではないのか、記事もあまりなく構築するのに色々と苦戦しました。
まず激安マイコンのSTM32F103C8T6はフラッシュ領域が64kBなのですが、アンロックすることで128kBにできます。
今回各ファームは64kB超えのROMサイズなので、必ずアンロック作業が必要になり
特別な書き方で行わないとできないので、STLink Utility上からでは書き込むことはできないので要注意。

ちなみに参考程度のメモですが、
ファームはRaspberryPi3上で環境を構築して同じCortexコアなのでそのままビルド、ファーム転送で構築しました。


2018年10月28日日曜日

VisualStudioCodeでSTM32の開発環境を構築する。(PlatformIO+STM32Duino、Arduino互換)

準備
今回は「STM32F103C8T6」を使っていきます。
基本的にはSTM32Fシリーズのマイコンなら同じ方法で出来ると思います。


まず最初にST-LINK V2を使って
USBドライバー2種類をインストールして
STM32 bootloaderを基板に書き込んである状態からスタートしていきます。

Step1.インストール
VisualStudioCodeを起動して、
拡張機能のPlatformIOをインストールする。
その後、PlatformIOのホーム画面上でBoard「STM32」をインストールする。


Step2.書込み確認
Helloworldプロジェクトを作り、下記画面の設定して、
下メニューにある上アイコンボタンを押して書込みを行う。
※環境変数PATHにJAVAのパスを入れておかないとエラーになるので入れておくと良いです。




以上!

2018年10月27日土曜日

VisualStudioCodeで日本語表示にする

VisualStudioCodeのUIはやっぱ日本語の方が見やすいと思うので変更してみました。

Step1.設定変更
まず、VisualStudioCodeを起動して
CTRL+SHIFT+Pキーを押してコマンド入力ウィンドウを表示。
「Configure Display language」と入力して
locale.jsonファイルを開き、

 "locale": "en" → "ja" に変更する。


Step2.Language Packを入れる
Ctrl+Shift+Xキーを押して、マーケットプレイス検索で

「Japanese language pack」と入力してインストール。

Step3.反映
再起動すれば日本語になります。



参考URL
https://code.visualstudio.com/docs/getstarted/locales


Unityをインストールする(+日本語化)

Unityを日本語化して使いたい場合、通常のインストールでは日本語化が出来ないので注意してください。
それと、Unity 2018.01までは自分でLocalizeフォルダを作って日本語化ファイルを入れる作業で対応できていたのが
Unity2018.02以降はUnityHub経由のインストール時に日本語化ファイルを合わせてインストールできるようになりました。
公式インストーラで日本語化ができるようになって便利ですが、
Unity Hubというインストーラ経由のみに対応しているため、
すでにUnityをインストールしてしまっている場合はもう一度インストールする必要があります。

UnityHub
 https://unity3d.com/jp/get-unity/download

これをダウンロードして実行すると、様々なバージョンのUnity本体が選べる画面が出てくるので
最新バージョンのインストールボタンを押すとリスト一覧が出てきて
その一番下に日本語化ファイルを選択できるのでクリックしてチェックを入れてインストールしてください。

これで快適なUnity環境が整います。

Windows上でWordPressをインストールする。

インストールするときにいくつか詰まったのでメモ。

環境構築はXAMPPを使ってWordPressをインストールする。

Step1.XAMPPをインストール。
 https://www.apachefriends.org/jp/index.html

Step2.WordPressをインストール。
 https://ja.wordpress.org/download/
 解凍したフォルダを「C:\xampp\htdocs\」に展開する。

Step3.WP-Config設定

 C:\xampp\htdocs\wordpress\wp-config-sample.php
 を
 C:\xampp\htdocs\wordpress\wp-config.php
 にリネームして、
 ファイルの中身の設定を行う。
ーーー
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpress');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'root');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', '');
/** MySQL のホスト名 */
define('DB_HOST', 'localhost');
ーーー

Step4.XAMPPでサービス起動
 ApacheとMySQLを起動する。

Step5.データベース作成
 ブラウザで「http://localhost/phpmyadmin/」を開き、
 データベースを作成する。(文字コードはutf8-bin)

Step6.Wordpressの設定
 ブラウザで「http://localhost/wordpress/」を開く。

 もし、「データベース接続確立エラー」というようなエラーが表示された場合は
 ブラウザで「http://localhost/wordpress/wp-admin/」を開くと
 詳しいエラー対処法の説明が表示されるので、それに従ってトラブルシューティングを行う。

以上、快適なWordpressライフを過ごそう!

2018年5月5日土曜日

[ESP32][AWS][IoT][Micropython]MQTT接続してPublish/Subscribeしてみる

Micropythonの公式v1.9.3のままだと証明書ありのSSL接続が未実装状態だったというオチがあって、3日ほど格闘してようやく解決。。

コミュニティのやり取りを見てると、ここの認証回りの修正は当分先な気がするので、自前パッチをあてるのがよさそうです。
(ESP-IDFのバージョンも最新のを使いたいとかもあるし、いっそのことまとめてやっちゃえ!w)


ってことで修正して動作確認。


#SSL接続import socket, ssl
s=socket.socket()
addr=socket.getaddrinfo("www.yahoo.com", 443)[0][-1]
s.connect(addr)
client=ssl.wrap_socket(s)


#MosquitoのブローカーにPublish(証明書なし)
import ssl
import socket
from mqtt import MQTTClient
MQTT_CLIENT_ID = "12341234"
MQTT_HOST      = "192.168.1.2"
MQTT_PORT      = 1883
client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=10000, ssl=False)
client.connect()
client.publish("test", "ok")
client.disconnect()

#MosquitoのブローカーにPublish(証明書あり)
kw = {}
kw["cacert"]          = cacertdata
kw["cert"]            = certdata
kw["key"]             = keydata
kw["cert_reqs"]       = ssl.CERT_REQUIRED
kw["server_hostname"] = MQTT_HOST
kw["server_side"]     = False
client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=10000, ssl=True, ssl_params=kw)
client.connect()
client.publish("test", "ok")
client.disconnect()


#Subsctibeしてみる


def sub_cb(topic, msg):
    print((topic, msg))

client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=10000, ssl=True, ssl_params=kw)
client.connect()

client.set_callback(sub_cb)
client.subscribe("foo_topic")

client.wait_msg()
又は
client.check_msg()



これらが上手く実行できていれば問題ないと思います。

2018年5月2日水曜日

[Mycropython][ESP32]HTTPのSSL接続を行う

証明書を使ったSSL接続はエラーが出て出来てないけど
MicropythonでHTTPS接続は出来たのでメモ


import ussl as ssl
import usocket as socket
s=socket.socket()
ai=socket.getaddrinfo("google.com", 443)
addr=ai[0][-1]
s.connect(addr)
s=ssl.wrap_socket(s)
s.write(b"GET / HTTP/1.0\r\n\r\n")
print(s.read(4096))
s.close()

2018年4月28日土曜日

[ESP32]Window上でmicropythonをビルドする(デュアルコア対応化)

ESP32ってデュアルコアなのにビルド済みのMicropython for ESP32はシングルコアしか使っていないのが分かった。。(2018年4月時点)
なので自前ビルドを実践する事にした。


Step1.環境一式ダウンロード
https://esp-idf.readthedocs.io/en/latest/get-started/windows-setup.html
600MB弱のファイルをダウンロードして任意のフォルダに展開する。
例:D:\msys32


Step2.環境構築
d:\msys32\mingw32.exeを起動
$ cd
$ mkdir -p esp
$ cd esp
$ mv esp-idf esp-idf.old
$ git clone --recursive https://github.com/espressif/esp-idf.git


Step3.micropythonのコードをクローン
$ pacman -S python2
$ curl https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ pip install pyserial

$ mv /mingw32/bin/envsubst.exe /mingw32/bin/envsubst.exe.del
$ pacman -S gettext
2$ vim ~/.profile
最後の行に
 export IDF_PATH=~/esp/esp-idf
 export ESPIDF=$IDF_PATH
を追加。
$ source ~/.profile

$ git clone --recursive https://github.com/micropython/micropython.git
$ git clone --recursive https://github.com/micropython/micropython-lib.git
https://github.com/micropython/micropython/blob/master/ports/esp32/mpthreadport.c
の136行目
TaskHandle_t id = xTaskCreateStaticPinnedToCore(freertos_entry, name, *stack_size / sizeof(StackType_t), arg, priority, stack, tcb, 0);
これを
TaskHandle_t id = xTaskCreateStaticPinnedToCore(freertos_entry, name, *stack_size / sizeof(StackType_t), arg, priority, stack, tcb, 1);
にする。

※Windowsだとシンボリック問題が発生するので、置換マクロ組んで全部置き換えました。。


Step4.ビルド開始
$ cd ~/esp/micropython/ports/esp32
$ make

★ここでHASHが異なるからビルドできないってエラーメッセージが表示されたら
ハッシュコードの部分は出力メッセージのに書き換えて
$ cd ~/esp/esp-idf
$ git checkout 3ede9f011b50999b0560683f9419538c066dd09e -b micropython
$ git submodule update

$ cd ~/esp/micropython
$ make -C mpy-cross
$ cd ~/esp/micropython/ports/esp32
$ make
$ make erase
$ make deploy

消去や書込めない場合、
$vim Makefile
ポート名は/dev/ttyS0 
など、各自環境に合わせて要調整。




諦めてビルド済みのを使う場合は、


ここからバイナリイメージをダウンロードしてきて書込み実行。

$ easy_install -U pip
$ pip install esptool
$ esptool.py --port /dev/ttyS0 --baud 460800 write_flash --flash_mode dio --flash_size=detect 0x1000 esp32-20171006-v1.9.2-276-ga9517c04.bin


追記:
Ubuntu on Windows 上で環境構築した場合、
Makefileの設定で

ポート名は、/dev/ttyS1 = COM1になります。
通信速度はデバイスマネージャに記載した通信レートを指定します。


以上!

2018年4月24日火曜日

[FreeRTOS]現在アクティブのタスクハンドラ・タスク名を取得する。

色々と検索すると古い情報だったり、カーネルをカスタマイズしないといけないとか
情報が散乱していて良く分からない状態だったのでまとめます。

結局は英語も良く分からないから、分からないなりに読めるソースコードを頼りに調べました。

タスクハンドラはTaskTCBのポインタになっているようですが、
Task.cに構造体が定義されていて直接参照したりすることができないようになっています。
構造体の部分を抜き出すやり方も検討しましたが、
最終的にはAPI関数のみでやる方法で落ち着きました。

現在のタスクハンドラを取得する方法
TaskHandle_t handle = xTaskGetCurrentTaskHandle();


タスクハンドラからタスク名を取得する
char* taskname = pcTaskGetName(handle);


これ知っておけばタスク間をまたぐような処理で
自タスクなのか他タスクなのかが判別できるようになりますね。

2018年4月21日土曜日

レディプレイヤーワン良かった

 スピルバーグ作品といえばやっぱり「激突!」
激突はトラックが永遠と追いかけてきて、振り切ったかと思っても
「またあのトラックあるやん!」って
見てる側もハラハラドキドキさせてくれる作品だったことを思い出します。
あれから色々な作品を世にだして巨匠となりますが
2000年以降は低迷続きでもう大作は難しいのかなって思ってた矢先に出してきたSF作品。
彼の思い描いている強烈な映画感を色濃く出してきた上に
80年代からの有名作品全部入り!
いくら映画好きでも昔の作品はまったく知らないし、
そういうのをいろんなシーンに挿入されてても元ネタが分からないんだよねー
それって「ラ・ラ・ランド」もそうだったじゃん!という人でも
アクション好きであればOKですw
全部入りシリーズは大体は不作に終わるジンクスがあると個人的に思っていましたが
久々にぶっ飛ばしてきましたね。

2018年4月17日火曜日

WindowsにAmazon Alexaをインストールする

本記事はalexa-avs-sample-appを動かすメモです。

2018年4月現在は、MSYS2上にインストールする方法がありますので
そちらを参照するといいかもしれません。

【元記事】

【修正するファイル】・samples/companionService/config.js
・samples/javaclient/config.json
・samples/javaclient/pom.xml
・samples/javaclient/ssl.cnf


ではスタートです。

Step1.Amazon developerにログインしてAVSデバイスを追加
ProductID、ClientID、ClientSecretキーを取得する。


Step2.サンプルプログラムをダウンロードする。
例:c:\project\alexsaフォルダに展開する場合、
DOSプロンプト上でクローンするフォルダに移動してから
> c:
> cd \project
> mkdir alexsa
> cd alexsa
> git clone https://github.com/alexa/alexa-avs-sample-app.git


Step3.依存アプリのインストール
・VLCをインストール http://www.videolan.org/
 環境変数に登録する
 例:
  環境変数名:VLC_PATH
  パス:C:\Program Files(x86)\VideoLAN\VLC

・Node.jsをインストール
 https://nodejs.org/en/download/


・Movenをインストール
 https://maven.apache.org/download.cgi
 ※環境パスを登録する事
 例:JAVA_HOME=C:\Program Files\Java\jdk1.8.0_162


Step4.SSL証明書を生成する
・OpenSSLをインストール
 http://slproweb.com/products/Win32OpenSSL.html
環境変数「Path」に「Bin」フォルダを登録する。
例「C:\tool\OpenSSL-Win64\bin」
・[C:\project\alexa\alexa-avs-sample-app\samples\javaclient]を編集する
YOUR_****の部分を全て変更する
countryName = JP
stateOrProvinceName = Tokyo
localityName = Nakano-Ku
organizationName = NA
organizationalUnitName = NA

・DOSプロンプト上でGenerate.batを起動する。
ここで適当な
プロダクトID、シリアルナンバー、パスワードを入力する。
例:
ProductID:Dispatcher
SerialNumber:123456
Password:1234
ちゃんとうまく証明書が生成できれば
「1 個のファイルをコピーしました」
というのが表示される。

・設定ファイルに生成した証明書の参照パスを設定する。

「c:\project\alexa\alexa-avs-sample-app\samples\companionService\config.js」を開き、
 sslKey: 'C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\server\\node.key',
 sslCert: 'C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\server\\node.crt',
 sslCaCert: 'C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\ca\\ca.crt',
 "products":"Dispatcher" : ["Dispatcher"],
を入力する。


「C:\project\alexa\alexa-avs-sample-app\samples\javaclient\config.json」を開き、
    "productId":"Dispatcher",
    "dsn":"123456",
    "provisioningMethod":"companionService",
 "clientId":"*********",
 "clientSecret":"*********",
 "locale":"ja-JP"
 "sslKeyStore":"C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\server\\jetty.pkcs12",
 "sslClientKeyStore":"C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\\client\\client.pkcs12",
 "sslClientKeyStorePassphrase":"1234",
 "sslCaCert":"C:\\project\\alexa\\alexa-avs-sample-app\\samples\\javaclient\\certs\ca\\ca.crt"


「clientID」「clientSecret」は最初のAVS登録時の情報で
「sslClientKeyStorePassphrase」は証明書作成時に入力したパスワードになります。
「products」はKey:Value型になっていて
 KeyはAVS登録時のProductIDで、
 ValueはSSL証明書作成時に入力したProductIDになります。


「C:\project\alexa\alexa-avs-sample-app\samples\javaclient\」を開き
17行目付近にある部分を下記のように編集
8.1.12.v20180117


・AndroidスマホにAmazonAlexaアプリをインストールする
 https://play.google.com/store/apps/details?id=com.amazon.dee.app&hl=ja&rdid=com.amazon.dee.app


Step5.ビルドと実行、そしてNode.jsサーバによる認証
Dosプロンプト上で
> c:
> cd project\alexa\alexa-avs-sample-app\samples\companionService
> npm install
> npm start
別のDosプロンプト上で
> c:
> cd project\alexa\alexa-avs-sample-app\samples\examples\javaclient
> mvn validate
> mvn install
> mvn exec:exec
を実行する。
これでJAVAアプリが起動する。
クラウドとやり取りするのは1つめのコンパニオン
GUIは2つ目のjavaアプリ
という2構成になっています。



ブラウザで「https://developer.amazon.com/lwa/sp/overview.html」を開き
最初に作成したAVSデバイスを選択して
Consent Privacy Notice URLは暫定のURLでも張り付けておく。

cd project\alexa\alexa-avs-sample-app\samples\companionService


【インストール時に引っかかった事】
設定ファイルで未記入の所でエラー。(エラーが出なくなるまで項目を埋めていった)
Jsonファイルの構文にひっかかった。(\\が2つになっていない箇所があった)
JAVAコンパイラが見つからなかった(パスの問題)
VLCのバージョンが32bitでDLL読込み失敗した(64bitのものにインストールし直した)
Localhostを127.0.0.1に直さないと動かない。


【まとめ】
以上の手順をこなせば、Alexaが動作する所まで確認できます。

構成は、
GUIがフロントエンド(JAVA)で
バックエンド(Javascript)にコンパニオンがいます。

動作の流れは、
GUIからログインを行うと、コンパニオンを仲介してAWSにアクセスして認証を通します。
Amazonアカウントのログイン完了後、
OKであればシークレットキーが届いて、これでアレクサと接続状態になります。
ダメな場合は400とかエラーコードが返ってきます。

接続状態の時にアレクサに話しかけてAlexsaスキルを発動すると、
対応する接続中のデバイスに対してNotificationが届きます。

これでESP32でLチカとかもできちゃいますね!

Androider