Arduino上のString クラス関数を使う便利さと心配ごと [arduino]
Arduino上にStringクラス関数があることを知らない人は多いと思います。また良く知る人たちは、メモリリークのことを心配して使いたがらない人も多いと思います。
弊社では、3GIMのサンプルプログラムを作成したなかでは、ほとんど文字配列ではなく、Stringクラス関数を利用するようになりました。まわりからは、メモリリークが起きやすい、つまりメモリがどんどん増えて行ってプログラムが中断するなどと注意するようにと助言されました。
しかし現時点、多くのサンプルスケッチを作成しては、数か月も動かしているなかでは、特にメモリリークで困ったことはありません。
こんななかで、以下のサイトを発見しました。ただし、このサイトは、2009年に書かれたもので、メモリリークでの問題点を指摘し、改善策を上げたものです。
http://todotani.cocolog-nifty.com/…/2009/06/arduino-texitst…
最新のArduino IDEで、この中のプログラムを起動させましたが、メモリが増えていることはありませんでした。
新たなIDEでは、改善されているようです。
もし、良かったら、文字処理で苦労されている方々には、このStringクラス関数をご利用されたら如何でしょうか?
■文字列宣言
String str;
String str="3GIM & 3Gshield";
■文字列検索
String str="abcdefg";
str.indexOf("bc"); 1
※ 検索できた場合は、0以上の数値
検索できなかった場合は、-1
■文字列置換
String str="ab cd ef gh";
※ 空白文字を"-"に全て置換
str.replace("","-"); str="ab-ce-ef-gh";
■文字列連結
String str="abcd";
str.concat("efgh"); str="abcdefgh";
または
str=str+"efth";
■文字列を文字配列に変換
char buf[100];
String str="abcdef";
int len=str.length(); // 文字列長さ
str.toCharArray(buf,len);
■文字列切だし
String str="abcdefgh";
str.substring(3); 戻り値:”defgh";
str.substring(3,6); 戻り値:” def";
■文字列(先頭と末尾のスペース抜き)
String str=" abc def gh ";
str.trim(); str="abc def gh";
■文字列を数値化
String str=“12.345”;
float f= str.toFloat(); f=12.345;
int i=str.toInt(); i=12;
■数値を文字列化
float f = 12.345;
String str = String(f); str=“12.34";
■ UART通信処理の常套アルゴリズム
ここで、iemSerial は、 通信のUARTシリアル通信ポート
▼応答(レスポンス)待機状態
while(!iemSerial.available() && (millis() –tim)
弊社では、3GIMのサンプルプログラムを作成したなかでは、ほとんど文字配列ではなく、Stringクラス関数を利用するようになりました。まわりからは、メモリリークが起きやすい、つまりメモリがどんどん増えて行ってプログラムが中断するなどと注意するようにと助言されました。
しかし現時点、多くのサンプルスケッチを作成しては、数か月も動かしているなかでは、特にメモリリークで困ったことはありません。
こんななかで、以下のサイトを発見しました。ただし、このサイトは、2009年に書かれたもので、メモリリークでの問題点を指摘し、改善策を上げたものです。
http://todotani.cocolog-nifty.com/…/2009/06/arduino-texitst…
最新のArduino IDEで、この中のプログラムを起動させましたが、メモリが増えていることはありませんでした。
新たなIDEでは、改善されているようです。
もし、良かったら、文字処理で苦労されている方々には、このStringクラス関数をご利用されたら如何でしょうか?
■文字列宣言
String str;
String str="3GIM & 3Gshield";
■文字列検索
String str="abcdefg";
str.indexOf("bc"); 1
※ 検索できた場合は、0以上の数値
検索できなかった場合は、-1
■文字列置換
String str="ab cd ef gh";
※ 空白文字を"-"に全て置換
str.replace("","-"); str="ab-ce-ef-gh";
■文字列連結
String str="abcd";
str.concat("efgh"); str="abcdefgh";
または
str=str+"efth";
■文字列を文字配列に変換
char buf[100];
String str="abcdef";
int len=str.length(); // 文字列長さ
str.toCharArray(buf,len);
■文字列切だし
String str="abcdefgh";
str.substring(3); 戻り値:”defgh";
str.substring(3,6); 戻り値:” def";
■文字列(先頭と末尾のスペース抜き)
String str=" abc def gh ";
str.trim(); str="abc def gh";
■文字列を数値化
String str=“12.345”;
float f= str.toFloat(); f=12.345;
int i=str.toInt(); i=12;
■数値を文字列化
float f = 12.345;
String str = String(f); str=“12.34";
■ UART通信処理の常套アルゴリズム
ここで、iemSerial は、 通信のUARTシリアル通信ポート
▼応答(レスポンス)待機状態
while(!iemSerial.available() && (millis() –tim)
二酸化炭素センサ3個セットが、まずまずの働きを示す [センサ類]
Arduino UNO R3 でCO2センサを3セット接続測定 [arduino]
これまでソフトウェアシリアル通信は、1組しか利用したことはありませんでしたが、今回3組を利用し、CO2センサ3セットを使って5秒間隔でシリアルモニタ画面にセンサ値を表示させるスケッチを作成してみました。
複数のソフトウェアシリアルは、Arduino UNO R3の場合、どこのデジタルI/O(D0~D19)でも設定できると記載してあったのですが、同時に使えることはなく、切り替えて使うことが判明しました。
つまり、切り替えしないと使えないようです。
よって、その切替したスケッチをメモとして残しておきます。
===========================
#include
SoftwareSerial CO21(4,5), CO22(6,7), CO23(8,9);
void setup() {
Serial.begin(38400);
}
void loop() {
Serial.print("--CO21 > " + String(sub_co2(CO21)) + " ppm");
Serial.print(", CO22 > " + String(sub_co2(CO22)) + " ppm");
Serial.println(", CO23 > " + String(sub_co2(CO23)) + " ppm");
}
int sub_co2(SoftwareSerial CO2){
int val=0;
uint32_t tim=millis();
String str;
CO2.begin(38400);
while(!CO2.available() && (millis()-tim)<3000);
str=CO2.readStringUntil('\n');
if(str.indexOf("ppm")) { //文字列検索
str=str.substring(0,str.length()-4); //文字列からの ' PPM'削除
str.trim(); // 空白文字削除
val = str.toInt(); // 文字数字の整数化
}
while(millis() -tim<5000);
return val;
}
===========================
結果は、添付写真のとおりに出てきました。
複数のソフトウェアシリアルは、Arduino UNO R3の場合、どこのデジタルI/O(D0~D19)でも設定できると記載してあったのですが、同時に使えることはなく、切り替えて使うことが判明しました。
つまり、切り替えしないと使えないようです。
よって、その切替したスケッチをメモとして残しておきます。
===========================
#include
とてもありがたい先日の技術セミナーの感想メール [その他]
先週金土でのArduino+3GIM+TABシールド+3GIMシールドを使ったセミナーを開催しまして、そのときの受講生の方からのメールを今朝ほどお送り頂きましたので、掲載しておきます。
**************************
お世話になります。また先日はご丁寧な講義をして下さって心から感謝しております。
感動の連続で、将来の起業の夢に向かって頑張れそうです。
感想につきましては、先生のエンジニアとしての良心と人柄に魅了されました。
?Arduinoの世界は非常に深いものであることがわかり、非常に良かった
?現実世界とマイコンの関係がリアルに体験でき理解が深まった(デモも含めて)
?資料をたくさん用意して頂いたこと
?ソフト言語のへ勉強は、これから作ろうとする現実を見ることが前提となるので頑張ろうという意欲が出ました
以上です。時間等の制限のなかでは内容の選択が必要なので、小生はとても満足しております。
*************************
嬉しいメールとなっています。
**************************
お世話になります。また先日はご丁寧な講義をして下さって心から感謝しております。
感動の連続で、将来の起業の夢に向かって頑張れそうです。
感想につきましては、先生のエンジニアとしての良心と人柄に魅了されました。
?Arduinoの世界は非常に深いものであることがわかり、非常に良かった
?現実世界とマイコンの関係がリアルに体験でき理解が深まった(デモも含めて)
?資料をたくさん用意して頂いたこと
?ソフト言語のへ勉強は、これから作ろうとする現実を見ることが前提となるので頑張ろうという意欲が出ました
以上です。時間等の制限のなかでは内容の選択が必要なので、小生はとても満足しております。
*************************
嬉しいメールとなっています。
CO2センサを試す [センサ類]
改めて3GIMの凄さを受講者の方が語る [3GIM]
昨日今日とArduinoとTABシールド、それに3GIM、3GIMシールドを使ったM2M/IoT技術セミナーを開催しました。
終わりに受講された方から、様々な可能性があること、簡単で短時間にシステムが構築できること、利用価値が高いこと、最先端で高度な技術がある程度理解できたこと、今考えている課題に直ぐにでも利用できることと言った内容で、高い評価を頂きました。
https://www.switch-science.com/catalog/2080/
今回、改めて分かりやすい教材をと、これまでの資産に加えて作成追加した資料もあり、さらなる分かりやすいものへと進化させました。
分かりやすいマニュアル教材と、短くて理解しやすいサンプルプログラムがとても重要と考え、今回のセミナーでも考えさせられた二日間でした。
利用者は、今ある課題を如何に簡単に短時間で解決するかがツールを選択する理由。それに合わせた商品に近づけるように頑張ります。
終わりに受講された方から、様々な可能性があること、簡単で短時間にシステムが構築できること、利用価値が高いこと、最先端で高度な技術がある程度理解できたこと、今考えている課題に直ぐにでも利用できることと言った内容で、高い評価を頂きました。
https://www.switch-science.com/catalog/2080/
今回、改めて分かりやすい教材をと、これまでの資産に加えて作成追加した資料もあり、さらなる分かりやすいものへと進化させました。
分かりやすいマニュアル教材と、短くて理解しやすいサンプルプログラムがとても重要と考え、今回のセミナーでも考えさせられた二日間でした。
利用者は、今ある課題を如何に簡単に短時間で解決するかがツールを選択する理由。それに合わせた商品に近づけるように頑張ります。
技術マニュアル公開の効果 [その他]
昨日、奄美大島の通信技術会社の方から突然電話がありました。
3GIMに関する問い合わせで、いつ発売するのか、何処で買えるのか、などの質問が最初にありました。
その後どのようにして使うのか、の質問があり、待ってましたとネット上で公開しているマニュアルをダウンロードしてもらって見てもらいました。
すぐさま電話の向こうから、「わかりやすい」との声が聞こえてきました。
そのあと、「やりたいことが、短時間でやれることが分かった」と、更に加えて「これまで通信系でこんなに簡単に説明した資料が無かったから、いつも苦戦していた」とも。
こちらとしましては嬉しい反応でした。こちらからは、「これまで3年間以上に渡って技術サポートしてきていまして、その集大成がWiKiページにまとめてきました」とも紹介しました。
その他にも「これまで多くの試作実験を続けてきていまして、イーサネットやwifiより安定した動きが確認できています」と話しましたら、そこは先方の方が良く分かっていた様でした。
早速、ネットから購入し利用してみるとのことでした。
今回の方だけでなく、これまで多くの購入される方々からの質問では、先ずはマニュアルの紹介と技術サポートのサイトを見てもらっての対応を行っています。
また、多くの利用者からの質問では、分かりにくさや使い勝手の悪さをヒアリングし、マニュアルや技術サポートサイトに反映させてきました。
これまでの多くの蓄積された技術情報は、他の競合商品との差別化ともなっていまして、充分に誇れるものになったとも自負しています。
しかし、技術は日進月歩で進化するもの、力を抜かず、今後もさらなる事例を増やし、より分かりやすいマニュアルにしたて、技術サポートサイトも更に充実させてまいりたいと思います。
今回の3GIMのマニュアルは、こちらとなります。
http://www.3gsa.org/data/3GIMmanualV1.1R1.0.pdf
また技術サポートサイトのWiKiページは、こちらとなります。
http://a3gs.wiki.fc2.com/wi…/3GIM%E3%81%AE%E7%B4%B9%E4%BB%8B
お時間ありましたら、ご覧くださいませ。
3GIMに関する問い合わせで、いつ発売するのか、何処で買えるのか、などの質問が最初にありました。
その後どのようにして使うのか、の質問があり、待ってましたとネット上で公開しているマニュアルをダウンロードしてもらって見てもらいました。
すぐさま電話の向こうから、「わかりやすい」との声が聞こえてきました。
そのあと、「やりたいことが、短時間でやれることが分かった」と、更に加えて「これまで通信系でこんなに簡単に説明した資料が無かったから、いつも苦戦していた」とも。
こちらとしましては嬉しい反応でした。こちらからは、「これまで3年間以上に渡って技術サポートしてきていまして、その集大成がWiKiページにまとめてきました」とも紹介しました。
その他にも「これまで多くの試作実験を続けてきていまして、イーサネットやwifiより安定した動きが確認できています」と話しましたら、そこは先方の方が良く分かっていた様でした。
早速、ネットから購入し利用してみるとのことでした。
今回の方だけでなく、これまで多くの購入される方々からの質問では、先ずはマニュアルの紹介と技術サポートのサイトを見てもらっての対応を行っています。
また、多くの利用者からの質問では、分かりにくさや使い勝手の悪さをヒアリングし、マニュアルや技術サポートサイトに反映させてきました。
これまでの多くの蓄積された技術情報は、他の競合商品との差別化ともなっていまして、充分に誇れるものになったとも自負しています。
しかし、技術は日進月歩で進化するもの、力を抜かず、今後もさらなる事例を増やし、より分かりやすいマニュアルにしたて、技術サポートサイトも更に充実させてまいりたいと思います。
今回の3GIMのマニュアルは、こちらとなります。
http://www.3gsa.org/data/3GIMmanualV1.1R1.0.pdf
また技術サポートサイトのWiKiページは、こちらとなります。
http://a3gs.wiki.fc2.com/wi…/3GIM%E3%81%AE%E7%B4%B9%E4%BB%8B
お時間ありましたら、ご覧くださいませ。
二酸化炭素センサを使ってみました。
この度、二酸化炭素センサを購入し、その評価をはじめました。
自然界では、二酸化炭素濃度は400ppmから上だそうで、
1)居室などで閉じこもっていると直ぐに1000ppm以上になり
2)1000ppmを超えると眠たくなってくるそうです
3)3000ppmや4000ppmだと危なくなってきて、自然換気が必要とのこと
まだ、それほど二酸化炭素の知識は無いのですが、頭脳の働きとは大きく関係しているので、興味もわくところです。
先ずは、頭脳労働のときは、1000ppm以下で押さえておきたいところです。
これまで二酸化炭素濃度など見えないところで仕事をしていたせいか、ある時には直ぐに眠たくなっていたのも、密閉したオフィスで継続して仕事していたせいかもしれません。
ただ、昨日この計測器を仕掛けて帰る間際では、1300ppmほどあったのが、今朝は700ppmまで下がっていました。また数十分で、すぐに800ppm、900ppm、さらに1000ppmを超えました。
窓を開けると、数分後に、900ppmを下回ってきます。
はやり換気がどれほど重要かも分かった次第です。
今後、茸栽培でのモニタリングシステムや、農業用モニタリングシステムで、これら二酸化炭素センサを利用していく予定でいます。
現在、このセンサも割高(約9000円ほど)ですので、それほど数多く設置できないのが課題となっています。
自然界では、二酸化炭素濃度は400ppmから上だそうで、
1)居室などで閉じこもっていると直ぐに1000ppm以上になり
2)1000ppmを超えると眠たくなってくるそうです
3)3000ppmや4000ppmだと危なくなってきて、自然換気が必要とのこと
まだ、それほど二酸化炭素の知識は無いのですが、頭脳の働きとは大きく関係しているので、興味もわくところです。
先ずは、頭脳労働のときは、1000ppm以下で押さえておきたいところです。
これまで二酸化炭素濃度など見えないところで仕事をしていたせいか、ある時には直ぐに眠たくなっていたのも、密閉したオフィスで継続して仕事していたせいかもしれません。
ただ、昨日この計測器を仕掛けて帰る間際では、1300ppmほどあったのが、今朝は700ppmまで下がっていました。また数十分で、すぐに800ppm、900ppm、さらに1000ppmを超えました。
窓を開けると、数分後に、900ppmを下回ってきます。
はやり換気がどれほど重要かも分かった次第です。
今後、茸栽培でのモニタリングシステムや、農業用モニタリングシステムで、これら二酸化炭素センサを利用していく予定でいます。
現在、このセンサも割高(約9000円ほど)ですので、それほど数多く設置できないのが課題となっています。
TABシールドの添付資料(マニュアル・サンプル)を改訂 [TABシールド]
この度、TABシールドのマニュアルを改訂し、マニュアル内のサンプルスケッチも添付ファイルとして提供することにしました。
6月にアマゾンより購入頂いた方より、いくつかの間違いのご指摘があり、新たに改訂し、修正・追加致しました。
こちらはTABシールドの紹介サイトです。
またアマゾンおよびスイッチサイエンスなどより販売しています。
http://www.amazon.co.jp/dp/B00ITFGMRI
https://www.switch-science.com/catalog/1615/
夏休み中のお子様への「モノづくり」チャレンジで、親子でトライしてみては如何でしょうか。
(別途、Arduino UNO R3などが必要です)
6月にアマゾンより購入頂いた方より、いくつかの間違いのご指摘があり、新たに改訂し、修正・追加致しました。
こちらはTABシールドの紹介サイトです。
またアマゾンおよびスイッチサイエンスなどより販売しています。
http://www.amazon.co.jp/dp/B00ITFGMRI
https://www.switch-science.com/catalog/1615/
夏休み中のお子様への「モノづくり」チャレンジで、親子でトライしてみては如何でしょうか。
(別途、Arduino UNO R3などが必要です)
3Gシールド・3GIMを使った堅牢な実用システムを作るためのポイント [3Gシールド]
3G通信モジュールを使ったシステムを実用的で堅牢なものにするためのポイントをいくつか紹介しましょう。
・1)設置場所での安定した環境構築
(悪環境:高温や低温・多湿などを避ける。密閉したケースなど用意)
・2)電源電圧の安定保持
(太陽光発電などは不安定になりがち、一回り大きい太陽光発電などを用意)
・3)自動リセット(再立上げ)の仕組み取り入れ
(ソフトウェアリセット:RESETにLOWをある一定時間流す、およびハードウェアリセット:電源を入れ直すなどの工夫必要)
・4)クラウド(サーバ)での監視の仕組み取り入れ
(3Gからデータがアップされてきているかを常時確認し、異常状況を知らせる仕組み取り入れ)
ーーーーーーーーーーーーーーーーーーーーーーーー
(上記は、WiKiページにも掲載しました)
http://a3gs.wiki.fc2.com/wiki/ワンポイント
・1)設置場所での安定した環境構築
(悪環境:高温や低温・多湿などを避ける。密閉したケースなど用意)
・2)電源電圧の安定保持
(太陽光発電などは不安定になりがち、一回り大きい太陽光発電などを用意)
・3)自動リセット(再立上げ)の仕組み取り入れ
(ソフトウェアリセット:RESETにLOWをある一定時間流す、およびハードウェアリセット:電源を入れ直すなどの工夫必要)
・4)クラウド(サーバ)での監視の仕組み取り入れ
(3Gからデータがアップされてきているかを常時確認し、異常状況を知らせる仕組み取り入れ)
ーーーーーーーーーーーーーーーーーーーーーーーー
(上記は、WiKiページにも掲載しました)
http://a3gs.wiki.fc2.com/wiki/ワンポイント