情報技術の四方山話

AI、IoT、ヤマハルータ、VPN、無線LAN、Linux、クラウド、仮想サーバと情報セキュリティのよもやま話

Arduino互換機 SeeedStudio XIAO でFreeRTOS を使う-先ずはサンプルが動くまで

2024-01-11 23:54:18 | AI,IoT,SensorNetworking
Arduino / Seeed Studio XIAOで初めてFreeRTOSを起動してみました。FreeRTOSを使うと、複数のタスクがあたかも並行で走るように見えます。
FreeRTOSはライブラリでの提供で、リアウタイム性の高いマルチスレッドの実行環境を提供します。FreeRTOSというOSが走り、その上にユーザアプリのタスクを起動するものではありません


FreeRTOSを使うことで、複数のセンサーを異なるタイミングで並行して読み取ることができそうです。

今後、FreeRTOSを使い、以下のステップで実装してみます

1.シリアルからのコマンドを受けLCDに表示する
2.温度、湿度、気圧をセンサーから読みとり、可読データとし保管する
3.可読データをLCDとシリアルに出力する

FreeRTOSを使い、並行動作のタスクを複数使ってセンサーの読み取りと出力ができそうです

いつもアクセスありがとうございます。Arduino互換Seeed Studio XIAOを使ってFreeRTOSを試し始めました。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SeeedStudio XIAO Extention BordでLED点滅とLCD表示ができました

2024-01-08 20:34:42 | AI,IoT,SensorNetworking
Arduino IDEで開発ができるSeeedStudio XIAOでの開発状況です。XIAO単独では、シリアル通信のインターフェイスしかないので、開発用拡張ボード経由で、センサーデータを読むことを目指しています

まずは例題のBlinkのソフトをコンパイルし、XIAOにインストール。動作することを確認します。XIAOは、基本的にArduinoと同じなので、ArduinoのexampleのBlink(=LED点滅)はそのまま動きました。これでアプリ開発環境は整ったことになります

拡張ボードにはLCD表示がついているので、何らかの文字を表示してみます。SeeedStudioの拡張ボードの設定と利用例に習って"Hello World"を表示し、フォントを変えるなど試すことができます。以下の写真は日付と時間の表示例で、1秒ごとに刻まれています。例題を基に大きなフォントに変更してみたものです


基板の裏側にMicroSDのスロットと内部クロック保持用のボタン電池ホルダがあります。電池をセットすると、電源が切れても時刻を刻み続けます。データにタイムスタンプを付ける、指定の時間にセンサーの値を読むなど、時刻に基づく処理がマイコン側でできるようになります


だんだんと動くようになってきました。コードは次回掲載します

いつもアクセスありがとうございます。SeeedStudio XIAOを開発ボードに取り付けて簡単な試験をしている様子を共有します。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Mobile ALOHA:家庭用ロボットの開発が一気に現実味を帯びてきました

2024-01-06 11:09:00 | AI,IoT,SensorNetworking
家庭用ロボットの開発がここまで来ています。驚くことが実現しました。動作は人が二人羽織のようにして教えるとのこと。ぜひリンクのページをご確認ください。Stanfordの研究者がgithubで公開した論文ページが開きます。わかりやすい多くの動画が掲載されています
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最新のArduio開発環境と実装環境を考える-Raspberry PiもMiniPCもUbuntu/Debian

2024-01-04 00:24:01 | AI,IoT,SensorNetworking
Raspberry PIの性能が向上し、様々なタスクを捌くことができるようになった。昨年RaspBerry PI 5が登場し、まさにデュアルデイスプレイLinuxPCとして活用できるほどに良いスペックになっている。RTCが内臓され、時刻を保持できる機能は、産業系などネットと無関係な環境での使い勝手もよくなる



一方、この数年で性能が向上したMiniPCが様々なメーカーから発売され、選択肢が広がった。私は、長年IntelNUCを使ってきたが、Intelがこの分野から撤退した。その一方で高い耐久性を求められる産業組み込み系分野から、高性能なグラフィクス性能を備えるゲーム用デスクトップ系まで、実に様々なMiniPCが登場している

MiniPCのほとんどはWindowsOSを搭載。通販で簡単に購入可能だ。RAMの容量を増やしたり、SSDを増設できるものもある。選択の自由度はRaspberry PIの比ではない。WinowsOSが動くPCは、そのOSをLinuxOSに変えることができ、Linux化したMiniPCはRaspberry PIのGPIOを利用したタスク以外のことができる。MiniPCにGPIOが必要であればArduinoのGPIOと組み合わせれば良い

私のArduino開発環境は、Windows 11とLinux/Ubuntu 22.04 LTSの両方を使い、Arduino IDEだ。Linux開発環境は、実装環境とほぼ相似なので好都合だ。Aduinoのプログラムと、Linux側のプログラムの並行開発ができる上に、データをCSV形式でLinuxに取り込んでしまえば、Linux上の様々な開発ツールを使って、自由自在に処理ができ、伝送もLinux環境を使えば簡単だ

私もRaspberry PIは大好きだ。長年その上で動くアプリケーションも開発してきた。でも、MiniPC+LinuxOS+Arduino/XIAO開発の自由度を知ったことで、Raspberry PIであることの重要性は薄れ、アプリケーションもMiniPC上で動かしている。MiniPC/Ubuntu/Debian上のアプリケーションは、Raspberry PI OS(Debian派生、旧名称Raspbian。)でも動く。CPU部分はアプリケーションに合わせ適材適所で選べばよい。必要ならサーバーやクラウドも選ぶことができる。Raspberry PIはその一台に完結する必要がある時のみ使うようになった

Arduino側も多様化している。ピンの位置を含めたインターフェイス互換ボードに加え、物理的なピン配置やCPUコアを再設計したSeeed Studio XIAOなど、新しい試みが広がっている。XIAOでは、センサーとの接続にGroveを使うことが前提なので、電気回路の知識無しでセンサーを活用することができる。
さらに高性能なマイコン基板には、組み込み用のPython、GO言語も移植されており、開発言語も広がりを見せ始めている。Arduino UNOも最新版は、物理的なピン配置こそ同じだがCPUは高性能化しており、再設計されている


MiniPCもArduinoも高性能化はさらに続く。オープンソースCPU設計のRISC-Vベースのマイコンも入手可能になった。開発の考え方も再設計が必要だ。いささか古典的に見えるが、プロトタイプから実装までLinuxホストにUSBシリアル接続のArduinoを組み合わせることが「今のRAD」開発環境だろう

いつもアクセスありがとうございます。Arduino開発と実装環境の再設計についての考えを共有します。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ChatGPTを使ってArduinoマイコンソフト開発-Arduino/XIAOにコマンドを送るコード

2024-01-03 23:57:57 | AI,IoT,SensorNetworking
Arduino/XIAOにシリアルポートからコマンドを受け付けて、動作を変更するサンプルコード。このような例を見ないので、私がChatGPT4を支援者として使って書いた。計算力・通信力のあるホストから状況に応じてセンサーまたは表示デバイスに情報を送ることができるようになる



使い方:
1.Arduino IDEでコンパイルしArduino/SeeedStudio XIAOにダウンロードし起動
LEDが一秒間隔で点滅
2.Arduino IDEのシリアルモニタから"BLINK"コマンドを送信
LEDが125msec間隔で点滅
3.Arduino IDEのシリアルモニタから"INTERVAL=500"コマンドを送信
LEDが500msec間隔で明滅。値を変えるとその値で点滅

日本語でコメントを書いたが、ChatGPT4から"英語の方がより広く伝わって良いでしょう"と英語に翻訳されたので、そのまま使うことに。コメントはChatGPT3.5でほぼ意味が分かるように日本語に翻訳することができることを確認している

(注)インデントが反映されないのは、ブログ機能の制約。近い将来GitHUBに置きたい


// 2024-01-03 TANIYAMA Ryoji
// This code is released into the public domain.
//
// This code is designed for Arduino / XIAO and is compatible with the Arduino IDE.
//
// If you require comments in Japanese, please refer to translations provided by ChatGPT.
// These translations have been tested for accuracy.

#define INTERVAL_BLINK 125 // Blink interval when in BLINK mode (milliseconds)
#define INTERVAL_BOOTUP 1000 // Blink interval during startup (milliseconds)
#define SERIAL_LINE_96 9600 // Serial communication speed
#define PIN_USER_LED 13 // Pin number for USER LED on Arduino

// Executed only once at startup
void setup() {
pinMode(PIN_USER_LED, OUTPUT); // Set USER LED pin to output mode
Serial.begin(SERIAL_LINE_96); // Begin serial communication (baud rate 9600)
}

// Executed continuously, appearing as if it's always running
// Do not confuse it with being called only once like main()
// Use static declaration for variables that are continuously used within the function
// Global declarations can make the code harder to read
void loop() {
static unsigned long interval = INTERVAL_BOOTUP; // Current blinking interval. Set initial value
static String incomingCommand; // Variable to store received commands

// Check for incoming data on the serial port
if (Serial.available() > 0) {
// Receive data from serial port until newline "\n"
// Returned value does not include "\n"
incomingCommand = Serial.readStringUntil('\n');
// Echo back for debugging purposes. println() method adds "\n"
Serial.println(incomingCommand);
}

// "BLINK" command received
if (incomingCommand == "BLINK") {
// Set interval to predefined BLINK interval
interval = INTERVAL_BLINK;
}

// "INTERVAL=N" command received, where N is in milliseconds
if (incomingCommand.startsWith("INTERVAL=")) {
// Convert string following "=" to a number and set the blinking interval
interval = incomingCommand.substring(9).toInt();
}

// Echo back any change in blinking interval for debugging
IsIntervalChanged(interval);

// Blink the LED with the specified pin number and interval
blinkLed(PIN_USER_LED, interval);
}

// Detect change in blinking interval, echo back the latest value to serial, and return it
int IsIntervalChanged(int interval)
{
static int last_interval; // Holds the current blinking interval to detect changes

if(interval != last_interval) {
Serial.print("Interval set to ");
Serial.print(interval);
Serial.println(" ms");
}

// Hold and return the current blinking interval
return (last_interval = interval);
}

// Function to handle the LED blinking
void blinkLed(int ledPin, int interval) {
digitalWrite(ledPin, HIGH); // Turn ON the LED
delay(interval); // Wait for the specified interval
digitalWrite(ledPin, LOW); // Turn OFF the LED
delay(interval); // Wait for the specified interval
}

いつもアクセスありがとうございます。Arduino/XIAOにシリアルポートからコマンドを送るコードを共有します
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ChatGPTを使ってArduinoマイコンソフト開発-Arduino/XIAOにコマンドを送る

2024-01-02 11:01:08 | AI,IoT,SensorNetworking
SeeedStudio XIAOのSAMD21マイコン版は、Arduino IDEで開発することができる。Arduino IDEの開発環境で、XIAOの開発ボードを使うと、開発着手までの期間は短くなる

 

USB接続したマイコンにUSBホスト側からコマンド送り、コマンドの指示で様々な動作をさせる。試作として、ホスト側のArduino IDEのシリアルモニター機能を使う。機能確認の方法として、一番簡単な方法だ

プログラム:開発者用LEDの明滅時間をコマンドで変更する
起動時はLEDが一秒ごとに明滅する
"BLINK"をホスト側から送ると125msecごとに忙しく明滅する
"SPAN=N"をホスト側から送ると指定したNmsecごとに明滅する

1.ChatGPTでLED明滅コードを生成
起動したらLED明滅が始まるだけの、簡単なプログラムをChatGPTを使ってプロトタイプした。ChatGPTの惜しいバグを修正して、期待の動作ができるようになった

2.ChatGPTでシリアルからのコマンドを受けるコードを追加
"BLINK"コマンドをホスト側から送ると、明滅間隔を125msecにする

ChatGPTを使って、シリアルからのコマンドを受け付けるコードを追加。loop(){}中で、ループのたびにserialポートへのデータ=コマンドの到着の有無を確認。到着していれば、到着したコマンドをシリアル出力し、ホスト側にエコーバック。"BLINK"であれば明滅間隔を125msecに変更する

ChatGPTのコードの変数の宣言位置を調整して、バグとなりにくいコードに変更して完成

3.ChatGPTで"SPAN=N"指定機能をコードに追加
指定する明滅間隔をコマンド行から取得して、明滅間隔としてセットする
受け取ったSPANコマンドが指定した明滅間隔をシリアル出力とし、エコーバック。
先のコードの素直な機能拡張なので、難なく動作

USB接続したArduino/XIAOにコマンドを送るコードは初めて書いたが、これで、コマンドを送るコードが具体化した。ChatGPTが必要なメッソドとコードを教えてくれるので、全体の実装は簡単だった

完成したコードは次回掲載し、解説する

いつもアクセスありがとうございます。ChatGPTを使ったマイコンプログラムの様子を共有します。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduino IDEで開発する仲間たち-Seeed Studio XIAO と開発ボード

2023-12-31 08:51:04 | AI,IoT,SensorNetworking
SeeedStudio XIAOは小型マイコンでArduino IDEでの開発ができる。概ねArduino Unoと同じイメージだ。センサーを付けるには、直付け可能な、Grove拡張インターフェースがある

LCDが付いている開発ボードにはGroveに加えmicroSD、RTC、RTC用ボタン電池スロット、それに充電池I/Fなど、全部入りだ

まとまった形が良ければ、Wio Terminalが簡明だ。これにもGroveがありセンサーを増やすことも簡単

今は、この三種類の開発に集中している



いつもアクセスありがとうございます。Arduinoの環境もだんだん広がり、より分かりやすい開発環境も整ってきました。引き続きこの分野の情報も共有していきます

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduino IDEで開発する仲間たち-まずはSeeedStudio XIAOとWio Terminalで開発

2023-12-28 20:16:44 | AI,IoT,SensorNetworking
Aduinoの開発環境で、様々なマイコン(Micro Computer)開発ができるようになった。

マイコン開発には電気回路が不可欠。が、お手軽なSeeedStudio社のデバイスを使い、ほぼほぼソフトの知識のみで、プログラム開発をする

SeeedStudio社のGroveデバイスを使うと、電気回路の知識がほとんど不要になる。まずは、動かしつつ試作ができる環境を揃えてみた

■Arduino IDEで開発ができる

■カラー発光するWio Terminal

■Arduino互換機での学習ボード


いつもアクセスありがとうございます。Arduino IDEで開発可能な、デバイスを紹介していきます
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

arduino / SeeedStudio Wio Terminalでの開発-battely baseでGroveポートも拡張

2023-12-24 08:40:48 | AI,IoT,SensorNetworking
 SeeedStudio Wio Terminalは、単体でもUSB電源で動作する。純正アクセサリに二段重ね接続できるLiPO 650mAH充電池BOXがあり、簡単に充電池で動かすことができた


LiPO充電池BOXには、拡張のGroveポートが6個ついており、本体の2ポートと合わせ、8ポートとなり、センサー類の拡張に便利だ

本体側
2 x Groveポート

拡張側
4 xGroveアナログ/デジタルポート
1 x GroveI2Cポート
1 x GroveUARTポート

充電池BOXを取り付けると、本体背面内臓の光センサーと赤外線送信機は完全に遮られ使うことができない。一方、Groveポートが増えるのでセンサー取り付けに問題はない。本体背面のGPIOポートは充電池BOXに延長コネクタがついており、充電池BOX背面にて利用可能だ

いつもアクセスありがとうございます。Wio Terminalの充電池BOXの情報を共有します。次回以降、いろいろなセンサーを試します
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

arduino / SeeedStudio Wio Terminalでの開発-Linux MiniPCでの開発環境

2023-12-05 23:39:23 | AI,IoT,SensorNetworking
Arduino / Wio Terminalを使ったシステム開発を始めている。Wio Terminalには、ディスプレイがついており、表示系の実装が容易だ。さらにBLE、Wi-Fiも最初から組み込まれており、バラバラから組み上げるより、遥かに楽に使い始めることができる

■Arduino Wio Terminal開発イメージ(DLL-E作)


■小さいがくっきりしたディスプレイ

表示は、サンプルプログラム。実際にはパラメータは取得していないので、各データはダミーだ

これで、開発環境とWio Terminalが正しくつながり、プログラムをロードできることが確認できた。工場出荷状態ではjumperという簡単なゲームが搭載されている。jumperもサンプルプログラムとして公開されており、再ロードすることができる

いつもアクセスありがとうございます。今回から数回に分けて、Arduino / Wio Terminalのプログラミングを共有します
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

IoT:Arduino / Seeed Wio Terminalで環境センシング

2023-11-27 21:27:27 | AI,IoT,SensorNetworking
Seeed社のWio Terminalを試し始めた。Wio Terminalは小型のディスプレイ、マイコン、センサ、マイクとスピーカー、Groveコネクタ、Wi-FiとBLEでの通信機能をひとまとめにしたものだ。Arduino IDEでの開発が可能でIoTデバイスにちょうど良い



似たような環境は、やはりSeeed社のXIAOでも実現できるが、Wio Terminalは一まとめに詰め込んだパッケージになっており、USB-C電源で動作する。まだ届いていないが、拡張バッテリ+拡張インターフェイスBOXもある



表示は、PCのパラメータ表示を行う例で実測はしていない。購入直後はJumperというゲームが入っており、PCにUSB接続すれば、すぐに動作確認ができる

WioTerminalは各種センシングのみならず、人への表示と、人からの応答を取り込むことができる機能を持ち、かつUSB、Wi-Fi、BlueToothによる通信が可能。これは便利だ

開発環境はArduino IDEを使うことができる。開発環境のPCは独立させ、開発専用機としたいので、MiniPCにLinux/UbuntuデスクトップをインストールしArduino IDEのLinux版を使っている

いつもアクセスありがとうございます。Arduino IDEで開発ができるWio Terminalの情報を共有します。気づいたことを順次共有していきます
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ブログ記事に見出しイラストを付けてみます-ChatGPT DALL-Eで作画-雰囲気変わりますね

2023-11-26 06:18:59 | AI,IoT,SensorNetworking
このブログには、見出しイラストを付ける機能がある。ChatGPT DALL-Eに描かせてみた。とても楽しい

今の見出しの原画。細長い絵はどうも描きたくないないようで、縦横比を指定しても、期待の比率では無い。努力したのであろう枠がついている


これは、良い感じだが、横長には切り取れないので、これから記事の中で使いたい。横長にするよう頼んだら空白の枠を付けてくれた。ブログ名の「情報技術の四方山話」の英語タイトルもつけてくれている

しばらくは、DALL-Eの画像も使いながら、記事を作ってみたい。一つ前のBusyBoxの記事の挿絵は、やはりChat GPT DALL-Eが生成したもの

いつもアクセスありがとうございます。ChatGPT DALL-Eの画像を共有します。ちょっとしたプロンプトで描けます。ぜひお試しを
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Altman氏がOpenAIからMicrosoftへ-科学とビジネス

2023-11-21 07:27:50 | AI,IoT,SensorNetworking
Altman氏がOpenAIのCEOを解任された。そしてMicrosoftの新しいAI研究部門を率いることになった

MicrosoftはOpenAIへの投資、Altman氏の参加で、Chat型AIを実社会に実装し、一気に企業態を変える

Altman氏は、Microsoftが積み重ねてきた資産と資源をビジネスのAPIとして活用することを選択したのだろう。Microsoftはこれまで以上に、Altman氏の活動を支えChat型AIのビジネスをリードすることになる。Chat型AIの基礎研究は、これまで同様OpenAIを活用すれば良い

Altman氏はOpenAIに在職中、Microsoftの巨額な投資を引き出した。MicrosoftはChatGPTを様々な自社プロダクトに融合させ、大きく変化させようとしている。検索のあり方を、いわばGoogle型=Google/list型から、Bing/chat型に変えたことだ。人の思考をなぞるchat型は、人になじみやすいと感じる

私も検索の入り口はChatGPTになりつつある。Bing検索がChatGPTの融合系であるBing/Chatに置き換わってからは、ChatGPT4またはBing/Chatで課題解決を始め、キーワードの確認と広がりを知るために、Google検索を活用している

Microsoftはオープンソース分野でも強力な支援者だ。Windowsの標準機能でLinuxが動く仕組みWSLで、シームレスで自然なマルチOS環境を提供している。そのLinuxのソースコードの中心部をホスティングしているGitHubもMicrosoftの一部門だ。Linux Foundationのプラチナメンバー13社の内の1社として、オープンソースの開発プロジェクトを支えている

これからのソフトウエア開発環境にChat型AIが統合され始めており、ソフトウエア開発者は、自身のアイデアをより高速に育てることができる時代に移った。厳格な論理性を持つソフトウエア開発は、もともとAIによる開発アシスタントが最も適している分野だ。この時代の変化でソフトウエア開発に求められるスキルは全く変わる

Chat型AIはオープンソース開発と融合し、ソフト開発のあり方を変革、加速する。そのスポンサーの代表にMicrosoftがなったのだ


いつもアクセスありがとうございます。Chat型AIを育ててきたAltman氏がMicrosoftへ移ることへの思いと背景への考察を共有します。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

IntelNUCを使ったWindows/SMB/SAMBAファイルサーバー構成の実例-Linuxで実装

2023-06-28 17:21:04 | AI,IoT,SensorNetworking
Intel NUC(Next Unit of Computing)とは、Intel社が企画販売しているお弁当箱のような小型PCだ。メモリやSSDは適宜選択・実装してOSをインストールする。OSはWindowsかLinuxを使うことができる

ハードウエアのスペックは様々。低消費電力機から、高性能機まで様々で、eMMCを内蔵し、Windowsをプリインストールした機種もある

Intel NUCあるいは、NUCのような小型PCにLinuxをインストールし、IoTゲートウエイ、自社開発リモートアクセスVPN EasyRASのゲートウエイ、LANの遠隔モニター装置として展開している

IntelNUCを使い始めた理由は、小型で堅牢な低消費電力の小型PCとしての用途だ。最初はRaspberry Piを使ったが、いくつかの実装を経てIntel PCの方が楽に安定したシステムができた。今はRaspberry Pi以外にも様々なデバイスがある

小型Intel PCは、事務所内のファイルサーバーやGitLabサーバにも使っている。概ね以下の構成だ

■小型Intel PCのファイルサーバ
OSはUbuntu Serverを、アプリはSAMBA4サーバーを、内蔵SSDにインストールしている。USB3インターフェイスで外付けディスクを接続。用途毎に使い分けている

全く不満無く活用している



いつもアクセスありがとうございます。今回はIntel NUC等小型PCを用いたシステム作りを共有します。とても便利になりました
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ChatGPTを仕事で使う日記-ChatGPTのスレッドを公開してみる

2023-06-04 05:43:50 | AI,IoT,SensorNetworking
ChatGPTを日常的に仕事で使っている。調べたことを共有できると便利なこともある。まだPlusでのBeta版だが、スレッドに対しリンクを張ることができるようになった

これは便利!

タイトルは自動設定のもの

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする