「技術メモ」カテゴリーアーカイブ

ESP32(Arduino)でタイマー割り込みを使う方法

ESP32(Arduino)でタイマー割り込みが使いたい!定時実行やセンサの状態取得等、一定時間が経過した際に実行させたい場合にタイマー割り込みを使いますが、
そんなタイマー割り込みをArduinoで使う方法をまとめました。

こんにちは、北神です。
ESP32(Arduino)でタイマーが使いたかったので試してみました。
以下のソースを貼り付けるだけで、タイマー割り込みが使用できます。

//===========================================================//
// Timer Interrupt
//===========================================================//
hw_timer_t *timer1 = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;

void IRAM_ATTR onTimer1()
{
portENTER_CRITICAL_ISR(&timerMux);
// 実行させたい関数をここに記載
example();
portEXIT_CRITICAL_ISR(&timerMux);
}

void Timer1_interrupt_setup(int usec)
{
timer1 = timerBegin(0, getApbFrequency()/1000000, true);
timerAttachInterrupt(timer1, &onTimer1, true);
timerAlarmWrite(timer1, usec, true);
timerAlarmEnable(timer1);
}

実行する際は、
Timer1_interrupt_setup(マイクロ秒) を記述して、その間隔で関数が実行されます。

ESP32では、HTTPの送信や受信で数秒程度、処理に時間がかかりますので、
その間にセンサーやスイッチの立ち上がりだけ見たい! ハードウェア特有の処理を済ませておきたい!という時に割り込みが使用できます。

ただ、何重にも割り込みは発生させることができませんし、割り込み後の処理で時間がかかる処理はご法度ですので、割り込みプログラムには留意が必要です。

ではでは。

RaspberryPiでプログラムを自動起動する方法

RaspberryPiでせっかく作ったプログラム、毎回コマンドやマウスで動かしてたらキリがない。
まして、電源入れたらひとりでに起動する組み込みで使用したい。自動化どうするんだっけ・・・

こんにちは、北神です。

RaspberryPiで、プログラムを自動起動する方法です。

古きLinuxユーザーの方は、init.dを想像するかもしれませんが、
今ではsystemdという仕組みが物凄く簡単ですので、ぜひsystemdを活用してみてください。

ます、systemdで起動する内容を設定する .serviceというファイルを作成します。
主にテキストのファイルですので、nanoやviで書き込みます。

[Unit]
Description= Custom Service
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/pi/service.py
[Install]
WantedBy=multi-user.target

Sytemdでは、service記述によりたくさんのオプションがあり、細かく設定する事ができます。
上記では、/home/piに保存したservice.pyをPython3で起動する単純な物です。

このファイルを、以下のコマンドでディレクトリにコピーします。
仮に hello.service としましょう。

sudo cp hello.service /etc/systemd/system/
sudo systemctl daemon-reload

これで、Systemdが読みに行けるファイルになりました。

実際に、起動を開始するには

sudo systemctl start hello.service 

終了する際は

sudo systemctl stop hello.service 

で行うだけです。

また、状態の確認は

sudo systemctl status hello.service 

で行えます。

簡単ですね。

最後に、自動起動を設定する際は、

sudo systemctl enable hello.service 

で行い、逆に自動起動を停止する際は

sudo systemctl disable hello.service 

で行えます。

非常に簡単ですので、覚えておいて損はないでしょう。

ではでは。

RaspberryPiでRAMディスク化する方法

RaspberryPiはLinuxで動いていますが、突然電源を切ってしまうと、ディスクを壊したりOSが起動しなくなる。
そんな問題が起きたりします。

回避のために行った内容をまとめていきます。

こんにちは、北神です。

RaspberryPiは組込み用途を想定された作りをしていない為、所謂「電源のブチ切り」には対応していません。

しかし、次第に組込み用途で使用される事が増え、世界中のエンジニアがアイディアを出し合い、とても良い方法が提案されました。

それは、「overlayfs」です。

この機能は、OSやアプリケーションの設定を変更せずに、起動時は、ディスクをRO(リードオンリー)に設定し、
起動後にアプリが書き込むファイルは、RAM上でRW(リードライト)にする機能です。

もう少し詳しく話しますと、

フォルダのアドレスをRAMやtmpに変更する必要がなく、書き換えや保存も”見かけ上”変更なく同等に実行されます。

しかし、見かけ上問題がないだけで、内部では書き換えや保存はRAM上で行われる為、保存ができたと思っても再起動をしますと保存前に戻ります。

さらに、試して気が付きましたが、書き込みがRAM上で行われる為、起動完了までの時間が少し速くなる事がわかりました。

ただ、ログ等の書き込みがRAMで行われてしまう為、電源を抜くと確認しに行く事ができない事を留意してください。

早速、そのoverlayfsの設定方法ですが

コマンドにて

sudo raspi-config nonint enable_overlayfs

これだけです。
これだけで、Rebootを行うと、起動時にROで立ち上がります。
書き込みや保存は全てRAMに転送されますので、保存されません。
これにより、電源ブチ切りを行っても、SDカードのディレクトリに障害は発生しません。
起動失敗による障害が減ると予想されます。

また、再びディスクに書き込みや保存を行いたい際は

sudo raspi-config nonint disable_overlayfs

を行い、再起動後に書き換えができます。

このoverlayfsに加え、systemd(systemctl)を駆使する事で、組込み用途で使用できるRaspberryPiに変化させる事できます。

ではでは。

ESP32でI2Cに接続されたデバイスの一覧を表示する方法(Arduino-IDEを使用)

ESP32でI2Cに接続されたデバイスを確認したい時ありませんか?

どのアドレスにデバイスがつながってるか、一覧で表示して欲しいですよね。

こんにちは、北神です。

RaspberryPiでは、i2cdetectというコマンドがあります。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- 4a -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

この様な表示のものです。

これを、ESP32でも行いたい。
早速、ESP32(Arduino環境)で行えるライブラリが無いか調べました。

ズバッと、ありました。

https://www.arduinolibraries.info/libraries/i2cdetect

ダウンロードしてライブラリに反映します。

早速サンプルを試してみました。

#include 
#include 
void setup() {
    Serial.begin(115200);
    Wire.begin();
    delay(1000);
}
void loop() {
  i2cdetect();  // default range from 0x03 to 0x77
  delay(2000);
}

試しに、BMX055という9軸加速度センサを試しに接続しました。
このセンサーは、ワンチップですが、それぞれI2Cは3個分(加速度センサ、ジャイロセンサ、磁気センサそれぞれ)あり、
i2cdetectで見ると、3台分のアドレスが表示されました。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- 13 -- -- -- -- -- 19 -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

これで、センサーのアドレスの確認や状態の認識ができますので、開発もスピーディーに行えると思います。

ではでは。

GPSを使って山手線一周を試してみた

こんにちは、北神です。

今回は「GPS/GLONASS受信機u‐blox M8搭載」を使ってGPSの性能がどの程度かの確認を行いました。

確認を行なった方法は、ノートPCにu‐blox M8を接続しGPSのデータを記録し続けます。簡易的なロガーのような機能です。

この状態で、山手線を一周し、どの程度線路に沿ったデータが取れるかの確認を行いました。

結果はこちら。

GPSで受信したNMEAと呼ばれるメッセージを解析し、緯度と経度をGoogleMapsに反映を行いました。

ドットが細かすぎて潰れた図になっていますが、地図を拡大するとこのように綺麗に線路に沿ったデータが取得できます。

また、GoogleMapsには地図を航空写真に変える機能があり、

こういった地図を見た際に「あれ、山手線ってどこ走っていたっけ?」といった疑問を

こう、実際に乗って見て確認することができました。

今回試したかったGPSの性能としては、そこそこ実用レベルであり、他の分野でも利用することが可能かと思われます。ただ、何箇所かGPSの情報が取得できなかった箇所もあり、アンテナの設置位置や補正方法等の検討は必要そうです。

今回はノートPCをロガーの代わりに試して見ましたが、RaspberryPiやその他の機器に接続して持ち運びが出来た際は、もっと色々な使い方が出てくるんじゃないかと思った次第です。

では。

株式会社アバンドでは、IoTに関するネットワーク開発、ハードウエア開発を行っております。

GPSやセンサー、通信に関わる案件お待ちしております。

まずは、お気軽にお問い合わせください。

CSS & JavaScript Toolbox で不具合?

CSS & JavaScript Toolbox とはWordpressで使うプラグインです。HTMLやCSSやJAVAスクリプトなどを組み込む時に
非常に便利な機能があるプラグインです。

CSS & JavaScript Toolbox

JAVAスクリプトで<script>と書いて「SAVE」ボタンを押しても、反応になし。
バグ?echo “<script>”と書いても「SAVE」ボタンを押しても、反応になし。
いろいろ調べてみて、バージョンをダウングレートしても同じ反応。
CSS & JavaScript Toolbox が原因ではないのでは・・・・

そうです、サーバ側の「WAF」(Web Application Firewall)が原因です。
Webアプリケーションからの攻撃からサイトを守るセキュリティ対策です。

WAFのログを見ると
****/wp-admin/admin-ajax.php?action=cjtoolbox_api&controller=blocks-ajax&CJTAjaxAction=save_blocks
xss-tag-1 

「xss-tag-1」でアクセスを排除したログが出ているのがわかります。
WAFを無効にすると、「SAVE」ができるようになります。

.htaccess でこのルールを許可できますが、セキュリティ上問題が発生する可能性があるので
慎重に設置してください。
SiteGuard_User_ExcludeSig xss-tag-1

ロール

ロール
(役、役割、役目、役柄、任務)
ロールは一般的には、「管理者」「承認者」「登録者」「ユーザー」などがあります。
WEBのブログですと、「サイト管理者」「編集者」「投稿者(ライター)」「デザイナ」「コメント管理者」
などになります。
IoTでのファクトリ関連ですと、「運営管理者」「生産計画者」「素材管理者」「ライン管理者」「生産管理者」「生産者」などとなります。

役割、権限を設定することにより、機能制限や表示制限を行います。
役割と作業内容を出し、機能や表示の有り無しを表にするのが、システムの要件定義では必要になります。
役割が重複する使用者が発生する場合があるので、しっかり検討してください。

MantisBT 2.24.1 でインストールで文字化け

バグ管理システムMantisBT 2.24.1で順調インストールでしたと思ったら、「検索」や「マイビュー」で文字化け。
一瞬「Warning: 2702 in *****/core/session_api.php on line 227」のエラーがでて、すぐに文字化けしたり、
そのまま文字化けの画面だったり。
文字化け

対応方法、MantisBTをインストールしたディレクトリに
.htaccess ファイルを配置してください。
下記の内容を追記:

#PHP
php_value output_handler none

これで直ると思います。

https://mantisbt.org/

文系女子レポート!プリメイドAIちゃんがやってきた!

プリメイドAIちゃんが届きました。

プリメイドAIはDMM.make ROBOTSが発売したダンスコミュニケーションロボットです。

スマホアプリで操作をすることによって、いつでもどこでもキレッキレのダンスをかわいらしく踊ってくれるそうです。

Webサイトには「簡単操作」と記載されていますが、本当に「簡単操作」で動いてくれるのでしょうか。

 

早速開けてみましょう。

 

箱の中に、花盛りの女の子を思わせる色使いの箱が入っていました。魔法少女アニメのようなロゴが印象的です。

開封を進めます。

箱を開けます。

しっかりと梱包されていて、箱を開けただけではプリメイドAIちゃんの姿を見ることができませんでした。

「分解・改造は絶対に行わないでください」という注意書きがあります。耳が痛くなってしまう方もいるのではないでしょうか。

 

どんどんいきます。

プリメイドAIちゃんのシルエット型の緩衝材の下からさらに緩衝材が出てきました。

でも、この緩衝材を避けると、

プリメイドAIちゃんと対面できました。

プラスチックの無機質なボディは、ところどころに曲線を用いたデザインとなっており、ほのかに女性性を感じます。しなやかさも感じるのは、全身の25か所に使われているというサーボモーターのおかげでしょうか。

すぐにでも動いてもらいたいところですが、まずはバッテリーの充電を行います。

Li-feバッテリーを使用します。

フル充電まで、3時間程かかるので、スマホにアプリをDLしながら待つことにします。

楽屋(仮)で待機中のプリメイドAIちゃん。

 

バッテリーの充電が完了したら、プリメイドAIちゃんの体にバッテリーをセットして

Bluetoothでスマホとの接続を行います。

Le-feバッテリーは、間違った繋ぎ方をすると大変なことになるそうです。気を付けましょう。

胸の蓋を戻し、スイッチオン!

ハートが光りました。

プリメイドAIちゃんに動いてもらうには、スマホとの接続が必要になります。

スマホでアプリを起動し、Bluetoothでの接続を行います。

何度か試行錯誤をして、スマホとの接続を成功させることができました。

スマートフォンで好きなモーションを選び、プリメイドAIちゃんに動いてもらいましょう。

まずは、アイドルの決めポーズの定番「ハート」を作ってもらうことに。

ハートを作ってもらうことができました。

かわいいです。

他にも様々なポーズをとってもらうことができます。

 

プリメイドAIちゃんは、15分以上続けて電源をオンにしていると、バッテリーやモーターの消耗が早まってしまうそうです。また、ダンスを踊ってもらう場合は、連続で3曲以上踊るのもNG。

癒された後は、しっかりと休んでもらいましょう。

なぜ今、Iotなのか

1999年にIoTという言葉が初めて使われてから20年。今や、その言葉は、広く普及し、IT関係の者たちの耳にはタコができるほど馴染んだものになっている。
いつのまにか、IoTを取り入れる企業が珍しくなくなったものの、なぜ、我々はIoTに取り組まなくてはいけないのか。その理由を考えてみたことはあるだろうか。

なぜ今、IoTなのか。改めて考えてみたいと思う。

有名な理由としては、人口減少による労働者不足に備えているというものがある。
「平成29年版 情報通信白書」には、人口減少に関して下記のような記載がある。
『国立社会保障・人口問題研究所の将来推計(出生中位・死亡中位推計)によると、総人口は2030年には1億1,662万人、2060年には8,674万人(2010年人口の32.3%減)にまで減少すると見込まれており、生産年齢人口は2030年には6,773万人、2060年には4,418万人(同45.9%減)にまで減少すると見込まれている。』
ここまで人口が減ってしまうと、もちろん経済にも影響が出ると予想される。

総務省の発表している「IoT時代におけるICT経済の諸課題に関する調査研究」(平成29年)には、IoTによる将来的な経済インパクトについて、『経済成長シナリオ』『ベースシナリオ』と名付けられた2パターンの試算が記載されている。
『経済成長シナリオ』は、2030年までに全企業のうち50.7%がIoT利活用をするようになるという試算で、資金不足や必要性がないなどの根本的な要因でIoTを導入しない企業以外は、IoT化が進み、企業改革も成功したという想定になっている。
一方『ベースシナリオ』は、2030年までにIoTを利活用しているのは全企業のうち27.7%になるという試算で、経済成長シナリオとは違い、根本的な要因以外に、人材不足やネットワークインフラの未整備などの問題がある企業はIoT化しなかったという想定で行われた試算である。IoTを利活用している企業の中でも企業改革まで成功した企業は、経済成長シナリオよりも少なく、全企業の中で18.0%に留まると想定されている。

この2パターンの試算では、下記の表の通り、就業者数、市場規模、実質GDPに大きく差が出るとされている。

2016年 経済成長シナリオ(2030年) ベースシナリオ(2030年)
就業者数 6440万人 6300万人 5561万人
実質GDP 522兆円 725兆円 593兆円
実質GDP成長率 1.2% 2.7% 0.8%

これはIoTによるテレワーク化や省力化で、女性や高齢者なども就労が可能になる結果だと考えられている。人口減少による就業者数の減少は避けられないが、IoT化することによって経済は将来的に成長すると想定されているのだ。

また、製造業では、IoTを導入することによって、人間を超えた技術でものづくりができるようになる。
例えば、製品の表面加工などは、人間の手と目で作業を行っていたが、機械を使用してデータと照らし合わせれば、人間には気付くことができなかったところまで作業を行うことが可能だ。
これまでは人間の力で行っていた作業を機械に行ってもらうことで、よりクオリティの高い商品を大量に生産できるようになる。クオリティの高い商品が市場に出回り、適正な値段で取引されれば経済は回っていく。

このように、IoT化は日本の未来の重要なカギとなっているが、平成も終わる2019年の今、IoTには時代の追い風が吹いている。

2018年には、ドコモが法人向けグローバルIoTソリューション「Globiot」を提供開始し、ソフトバンクもNB-IoTの商用サービスを開始した。KDDIの「IoT世界基盤」は、2019年度中にサービス開始を予定している。これらは、携帯会社が持っている回線を使ってIoTに使用できるサービスだ。これにより、企業のIoTへの参入のハードルは非常に下がった。

また、IoT普及に一役かったスマートフォンに関しても、まだ人気は続きそうだ。IoTが普及した背景には、スマートフォンの家庭への爆発的な普及により、部品やセンサなどが大量に生産されたため安く手に入るようになったことがあるのは有名な話だ。総務省「平成29年版 情報通信白書」に掲載されているIHS Technologyによるグラフでは、iphoneが発売された2007年には全世界で1.1億台だったスマートフォンの出荷台数は、2013年以降は毎年10億台を突破している。
日本人のスマートフォン保有率も年々増え続けており、総務省「平成30年版 情報通信白書」によると、日本人のスマートフォン保有率は2017年に60.9%となった。スマートフォン保有率の上昇と合わせて、IoT家電の需要も増えれば、家庭にもIoTが普及し、新たな需要や技術が生まれる可能性がある。

なぜ『今』、IoTなのか。
IoTが注目され始めてから、何度も問われてきたその質問の答えはただひとつ。
日本が存続していくには、IoTが不可欠だからである。今、世界中でIoTが注目されているのは、人間の生存本能だったのかもしれない。時代が進むにつれて、IoTの必要性はどんどん高まっていく。

◆参考資料

「IoT時代におけるICT経済の諸課題に関する調査研究」(平成29年)
https://www.mhlw.go.jp/file/05-Shingikai-11601000-Shokugyouanteikyoku-Soumuka/0000062121_1.pdf

総務省『平成29年版 情報通信白書』
http://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h29/html/nc111110.html

総務省『平成30年版 情報通信白書』
http://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h30/html/nd252110.html