投稿

Linux(Ubuntu) Eclipse STM32 開発環境

イメージ
Linux(Ubuntu) Eclipse STM32 開発環境 久しぶりに、STM32の開発環境について書きます。 開発環境は、おなじみの? Eclipse + SW4STM32 ですが、 開発プラットフォームは、Ubuntu 18.0.4 LTS 64bit です。 前回記事「 EclipseによるSTM32統合開発環境構築 」で紹介した、WindowsのEclipse+SW4STM32と(ほぼ)同様の環境をLinux(Ubuntu 18.0.4 LTS)上に構築する方法について解説します。 ほぼ、と書いたのは後ほど。。。 基本的なソフトウェア構成についてもWindowsとほぼ同じですが、Windowsでは使用するEclipseとしてPleiadesを使っているところをUbuntuでは snap で Eclipseパッケージを直接インストールしたり、ST-LinkがWindowsでは本家STMicroのモノであるのに対してオープンソースを使ったりと、いくつか異なるソフトウェアもあります。 その関係で? Eclipseは英語のままで日本語化していません。 ソース上のコメント表記とかは日本語入力できるし、特に日本語にするメリットも感じられないのでこの記事では英語のママです。 ご容赦を。 また、Windows上での操作と同様の箇所についての詳細は、Windowsでの解説を確認ください。(手抜き!) 使ったOS:  Ubuntu18.0.4 LTS 64bit インストールするソフトウェアの一覧:  STM32 CubeMX  Eclipse  STM32 CubeMX Eclipseプラグイン  SW4STM32 Eclipseプラグイン  CDT Eclipseプラグイン  stlink-tools  その他、説明文中で apt install   (すでにapt install場合は不要) まずは、念の為 $ sudo apt update とかやっておいいてください。 CubeMXもEclipseもJavaで動作するので、まずはJavaの実行環境をインストールします。 $ sudo apt install default-jre STM32 CubeMX

Linuxシステムコール、POSIX mutex による排他制御

UNIX / Linux システムコール・プログラミング POSIX mutex による排他制御 mutex(ミューテックス)とは? mutex(ミューテックス)は、 Mut ual Ex clusion の略で訳せば相互排他となります。 Unix系のOSにはセマフォも存在していますが、セマフォとの違いとしては、 ・ミューテックスでは制御権を持てるのは1つだけ。 セマフォは複数の使用者を設定することが可能です。 セマフォで使用者を1つだけとした場合は、ミューテックスと同様の動作となります。このように0/1だけの操作となるようなセマフォ/ミューテックスはバイナリセマフォとも呼ばれます。 ・ミューテックスは所有者の概念を持っている セマフォでは、ロックするプログラムとアンロックするプログラムが別でも構わない。 (デッドロックの元になるので危険な実装なのでオススメはしない) しかし、ミューテックスでは所有者の概念があるためロックをかけた使用者しかアンロックできない。この部分がセマフォと異なる部分です。 これらの特徴から、ミューテックスはスレッド間の排他制御でよく利用されます。 ミューテックスを使ったロックは、ロック動作を行ったスレッドしかアンロックできません。 それでは、 早速コードを示します。 mutex.c #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <ctype.h> #include <unistd.h> pthread_mutex_t mutex; void* thread(void* arg); // スレッドエントリ // // Main thread. // int main(int argc, char **argv) { int ret; const char *arg1 = "Pneumonoultramicroscopicsilicovolcanoconiosis, Pneumonoultramicr

ArduinoでLCD制御(QAPASS1602)と、c++のお話。

イメージ
ArduinoでLCDを制御する++ いまで、このサイトでは使用するLCDとしてとして AQM1602Y-RN-GBW を使ってきました。  ・ Arduinoを使ってみよう  ・ Arduinoでタイマー割り込み これらの記事でも触れていますが、このLCDモジュールは3.3Vで動作しますがレベル変換など入れず、モジュールの実力で動作しています。 ソフト屋は、こういったトコロがいいかんげんで電気屋が怒るポイントです。 (:P) そこで、今回はArduinoで動作する5VのLCDモジュール、QAPASS1602を手に入れ、マトモな5Vの回路で動作させてみました。 今回は、デバイスを動かすだけ? で、終わらないのがLightning Brains。 そこで、今回はArduino開発環境(c++)についてちょいとばかし 掘ってみました。  目次:            ・ QAPASS 1602とは?  ・ さっそくLCDモジュールを使ってみよう  ・ まずは、”Hello World.”を表示させてみよう   ・ Arduino IDEを掘ってみる!  ・ Arduino IDEって、c++じゃん?  ・ main.cppからいじってみる  ・ Arduino IDEを使ったc++開発は可能か? QAPASS 1602とは? Amazonでも入手できるので、Arduinoな世界では標準的なデバイスなんでしょうか? 価格も500円前後、ずいぶん安いトコロもありますがソコは各自で判断して購入ください。 モジュールの仕様も、バックライトあり・ナシなど違いがあるので気をつけてください。     このLCDモジュールですが、コントローラーは HD44780 という日立が大昔に作ったモノが今でも標準として使われています。これらのモジュールはその互換品が使われているようです。 このコントローラーの特徴としては、データ線を4本して通信できるところです。その他に制御線が2本必要なので、全部で6本のデジタル出力が必要になります。 データ線が4本なので、実際にデータを1バイト送る際には、上位4ビットと下位4ビットに分けて送る必要があります

Arduinoでタイマー割り込み

イメージ
Arduinoでタイマー割り込み 前回の記事( Arduinoを使ってみよう )で簡単な時間計測プログラムを作成しましたが実は正確ではありません。 なぜならば、デッドラインを意識したリアルタイム設計が成されていないからです。 そこで、今回は、Arduinoのタイマー割り込みを使ってより正確な時刻計測を行うプログラムを作成してみましょう。  目次:            ・ デッドラインとは?  ・ タイマーで1秒間隔の割り込みを作るには?   ・ 正確なストップウォッチを作ってみる! デッドラインとは? なぜ、前回のタイマー処理では正確な時間計測ができないのでしょうか? 処理を時間で見てみると下記のようになっています。 LCDへの表示を行い、その後1ミリ秒のディレイを行っています。 1回の処理時間は下記のようになります。  処理時間 = LCD表示処理時間 + 1ミリ秒ディレイ LCDの表示にかかる処理時間は短いものですが、使い続けると誤差が大きくなってしまいます。 組み込み機器は、電源を入れられるとそのまま動き続けることが多いため、このような誤差も問題になってきます。 或いは、実際の競技計測のように厳密な計測を求められるような場合も同様です。 そこで、下記のように1秒の間隔の間でLCDの表示処理を行うようにする方法が考えられます。 このような処理形態とした場合、 必ず1秒以内に処理を完了しなければなりません 。 この1秒という時間が『 デッドライン 』になります。 上記の図では、2つ目の1秒の間隔で処理が終わることができませんでした。 このような場合、次の1秒の処理に影響が出てしまうため、このような状況は避けなければなりません。  だから、『 デッドライン 』といいます。 また、このデッドラインを意識した設計は、組み込み機器のリアルタイム性能に大きく影響を及ぼします。 さて、ではどうやって1秒の間隔を作り出せばよいのか? このブログの以前の記事「 STM32F3 Discovery、タイマーと割り込みのキホン 」ではタイマーで割り込み駆動してLEDをソフトPWMで制御しました。 Arduinoでも同様に、タイマーによる割り込みが可能です。

Arduinoで割り込み処理

イメージ
Arduinoで割り込み処理 Arduinoだって割り込み処理、できるもん。 今回は、Arduinoを使った割り込み処理についてです。 さて、今回もArduino Microを使ってのコードです。  目次:            ・ スイッチ状態を読み取る  ・ スイッチの状態変化を割り込みで受け取る   スイッチ状態を読み取る まずは、外部にタクトスイッチを取り付けてArduinoで受け取るプログラムを作成してみましょう。 回路図は、下記のようになります。 この回路では、電源電圧5Vを220Ωの抵抗を挟んでデジタル入力の12とスイッチに接続しています。スイッチのもう1方はGNDに接続としています。 このような接続方法を”プルアップ接続”といいます。 この接続方法では、ボタンを押さない状態ではデジタル入力ピンに電圧がかかっているため、HIGHとして認識され、ボタンを押すとGND側に電流が流れるためLOWなることでボタンが押されたことを検出できます。 実際に使うスイッチはタクトスイッチです。 ブレッドボード上ではこんな感じになります。 まずは、簡単なプログラムとしてスイッチが押された状態ならば、ボード上のLEDを点灯し、離された状態ならばLEDを消灯するプログラムを作成してみましょう。 プログラムは、下記のようになります。 スイッチの状態を検出するプログラム const byte LED_PIN = 13; const byte INPUT_PIN = 12; void setup() { // Digital Pin設定 pinMode(LED_PIN, OUTPUT); // On-Board LED pinMode(INPUT_PIN, INPUT); } void loop() { if(digitalRead(INPUT_PIN) == LOW) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } } デジタル入出力12番を入力に設定し、ボード上のLEDを点灯するためデジタル入出力13番を出力に設定

UiPathで、ファイルをまとめてダウンロード

イメージ
UiPathでファイルをまとめてダウンロード とある知り合いが、悩んでいました。 その悩みとは。。。 いま契約している有償サイトが閉鎖することになった。 そのサイトは、業界向けのドキュメントのアーカイブで、ドキュメントはPDF形式で 自由にダウンロードできたが、 サイトが閉鎖されると参照できなくなるで困る。 そこで、 とりあえず、片っ端からダウンロードしたいが、 ドキュメントの数が膨大で人間業でやるのは大変。 バイトにやらせるのもねぇ。。。 との内容。 そこで、ワタシは、 「なあんだ、そんなのRPAにやらせればいいじゃん。」 「え? でも金ないぞ。」 このブログのネタにさせてもらう! ってコトで、格安で引き受けました。 (それでもイメージとかアップできないので。。。) てな感じで始まりました。 ポイントは ・とにかく自動でダウンロードしたい ・ 使うのは今回だけなので金はかけたくない  → 本格的な開発はム~リ~ サイトの方はどうなっているかと言えば ・要求は暗号化されている ・条件指定で検索、1ページ20件まで表示 ・結果は表形式(テーブル)表示される ・表中のリンクをクリックするとダウンロードページが表示される 最初は、自動で検索とかも考えていましたが、 『 金はかけたくない』 とのことなので、 ”半自動” と言うことで了解してもらいました。 半自動ダウンロードの仕様 ・『金はかけたくない』 とのことなので、検索は人が行う  使っているブラウザは、Chromeなのでソレに固定。 1年分とかをまとめて検索、時系列に古い順にソート、は人にやってもらいます。  すでに検索済みのページに対してダウンロードを行うとする。  検索結果のページは、下記のようになる。   検索結果は、テーブルにサマリーとリンクとして表示される。   そのリンクをクリックするとダウンロードページに遷移する。 ・『金はかけたくない』 とのことなので、”力技”実装  ページは同じフォーマットなので、キホン”タブ”+”Enter” で操作できる。  テーブルの前に、いくつかのリンクがあるので、ソコを”タブ”で飛ばす。  テーブル内のリンクまでたどり着いたら

Arduinoを使ってみよう

イメージ
今回は、小学生でもプログラミングしてロボットなどを制御できるArduinoです。 ええい!俺はコテコテの組み込み屋だ!! などと仰る方も、プロト作成なんかには便利此上ありません。 今日は、そんなArduinoの使い方の基本についてです。  目次:            ・ Arduinoとは?  ・ Arduinoのライセンス  ・ Arduinoの開発環境  ・ Arduinoのプログラミング  ・ まずは、「Hello World」  ・ LEDを点滅させる(Lチカ!)  ・ 別のシリアルも使ってみる  ・ I2Cのデバイスを使ってみる(LCD) なお、この記事では開発用のPCには、Windows 10 (1903) 使用するArduinoボードは、Microを使っています。 Arduinoとは? 「Arduino:アルデュイーノ」と読みます。 イタリアンな感じの発音、そう思った方は正解です。 それは2005年、北イタリアのイヴレーアという街のインタラクションデザイン工科大学(IIDI)から始まりました。 5人の人物たちが学生でも気軽に使えるような安価で、かつ、簡単に使えるコントローラー、つまりワンボードマイコンを作って販売する「Arduinoプロジェクト」から始まりました。 そして、彼らは、シンプルな設計のボードだけではなく技術者ではなくても開発が可能な開発環境の開発に成功し、ハードウェア・ソフトウェアともにオープンとなものとして公