2017年1月21日土曜日

Flash Air でのつまづき対応

参考書

最初にすること

  1. FlashAirのソフトウエアを更新しておく。(古いと、思わぬ挙動で苦労する)
  2. 設定ソフトウエアで初期化してCONFIGファイルを生成する


FLashAirソフトウエア(設定ソフトウエアと、ソフトウエア更新ツールの2種類がある)

※無線LANの設定などで、CONFIGを修正するが、このファイルは、FlashAirToolで初期化しないとできない。(一度フォーマットすると消えて、ツールで設定しないと生成されない?)
※CONFIGは"SD_WLAN"という隠しフォルダに入っている。これを表示するには、こちらを参照


CONFIGの設定

FlashAirDevelopers-APIガイド-CONFIG に命令一覧がある
設定ツールもある

CONFIGの書き換え

SDカード内の"SD_WLAN"フォルダ内にCONFIGファイルがあるが、直接エディタで開こうとすると”ファイルがありません”などと表示が出て内容の更新ができない場合がある。このときはSDカードからCONFIGファイルをHDDなどにコピーしてから編集して、上書きコピーで戻す。

FlashAirドライブの使用条件

東芝Webの説明:FlashAirドライブ(WebDAV)の使い方

使用条件:
1.Flash AirW-03であること
2.AP、同時接続モードで使える
3.STAモードでもIPアドレスを指定すればブラウザからファイルを見ることができる。
   例:ブラウザから 192.168.xxx.xxx (xxxはSDカードに割り付けられたIPアドレス)
4.スマホの"FlashAir"アプリはAPモードでスマホとSDカードを直接接続しないといけない








FlashAirの世代見分け方

1世代
 "W-xx"の表示はなく、SD表の速度表示が⑥

2世代
SD表の表示が"W-02"

3世代
SD表の表示が"W-03"


FlashAirからFTPサーバへのファイル転送 Luaプログラム


FTPを使ったファイルのアップロード のLuaプログラムを使用
このチュートリアルは機能毎にコード説明されている。上から順につなげていけばよいが、

--------------------------------------------------------
使い終わったら閉じるのを忘れずに!
--Close our log file
outfile:close()
-------------------------------------
の部分は、プログラムの一番下に付ける。


このチュートリアルのファイル転送部分のコードは修正が必要
ファイルの転送部分のコードで、

現状: response = fa.ftp("put", ftpstring..file, folder .. "/" .. file)



修正: response = fa.ftp("put", ftpstring.."/"..file, folder .. "/" .. file)

※現状のままだと、コピー先のフォルダ名がコピーするファイル名に付加されてしまう。


FlashAirへのLuaプログラムの書き込みと動作確認は
FlashTools Lua Editor を使うとよい

リンク

FlashAir IoT Hub

トラブル回避

FlashAir IoT Hubチュートリアルより

※もし、画像のアップロードがされない場合、CONFIGファイルにLUA_RUN_SCRIPTがあればコメントアウトして下さい。 LUA_RUN_SCRIPTLUA_SD_EVENTで指定したLuaスクリプトが同時に実行されると上手く動作しない場合があります。

170326追加

FlashAirでWifi経由でのファイルを削除する時の注意

FlashAirを機器に入れたまま、wifi経由でファイル削除を行うと、機器が認識しているファイル情報がFlashAirと不一致になり、その後のSD操作ができなくなることがありました。
このため、上記のようなファイル削除など、ファイル情報を変化させる操作をFlashAirを入れている機器とは独立に行う場合は、動作確認を行って希望する動作をすることを確認したほうが良いです。


2017年1月5日木曜日

「mbed オフラインの開発環境」の整備でのつまづき対応

mbedCLIの環境整備をした時のつまづき点のまとめです。

試した環境は、
Windows10Pro 64bit
RAM 8Gbyte
core i5


一個前の「EclipseとpyOCDでプロジェクトをデバックする」で、pythonはインストールしてある状態です。

参考web
こちらのwebで作業しました。 mbedCLIをWindowsで使ってみる(環境構築編)
そのうえで、このwebを読みました。mbed オフラインの開発環境


<Git>

2.11.0が最新だったのでそれを入れた。インストール時の設定は変えなかった。

<Mercurial>

4.0.1を入れた。これもインストール時の設定は変えなかった。

<GNU ARM Embedded Toolchain>

これは、「EclipseとpyOCD・・・」でインストール済

<各ツールのPTAHチェック>
Mercurialでエラー表示
インストール時にも警告が出ていたが、そのまま続けたら正常終了したのでほっといた。それが影響しているのか? とりあえずこのままで様子見。この警告の後コマンドプロンプトは正常に出力終了していた。


<mbedCLI>

インストールのコマンドで”python -m"をpipの前に入れないと受け付けてくれなかった。"python -m"を省略する設定があるのか?
インストールは正常終了した。


"mbed import https://・・・・"を実行するがエラーになる。(コマンドがないといわれる)

mbed.exeのPATH(C:\Python27\Scripts)がないからか・・・

pythonの解説
ということで、pathを環境設定に追加

PCを再起動して、再度実行。で通った

後は問題なくコンパイルから、mbedLPC1768で動作させるところまでできた。



2017年1月3日火曜日

「Eclipse と pyOCD でプロジェクトをデバッグする」の環境整備でのつまづき対応

「EclipseとpyOCDでプロジェクトをデバックする」の環境整備でいろいろつまづいたのでまとめておきます。

<eclipse>

eclipseが起動しませんでした。javaがないとのことで、oracleからダウンロード・インストールしました。これが、32bit版が選択されるらしくうまくいきません。(私の環境はwin10 64bit)


そこで自動選択ではなく、手動でインストールファイルを選択します。



javaのインストール後、jvm.dllをeclipseの eclipse.ini に設定します。
jvm.dllは下記のフォルダにありました。


iniファイルの設定は下記のとおりです。

<python>

pythonのインストール時にpath設定のチェックボックスが出なかったので、install後に手動で設定しました。

windowsの"設定"窓を開いて"path"で検索すると、設定画面が出てきます。







そこに"python.exe"があるフォルダを追加します。




pipでpyocdをインストールするには、DOS窓からコマンドを打ち込みます。


 "pip"を実行するには"pip"の前に、"python -m"をつける必要があります。



<eclipse>

errorが出ている。以下の方法でできた。

出ているエラーは2種
Program "echo" not found inPATH
Program "make" not found inPATH

FAQがあった(Eclipse Community Forums)
ここにも同じFAQ(Stack overflow: Program"make"not found in PATH)

しかし、最近のソフト・アプリは、説明書なしに気ままに作って、使う側が手探りで方法を探して、ネットで共有するものなのね。大本になるマニュアルや情報があるといいのに。

Cdriveを検索してもmake.exeがないので何かインストールを忘れているみたい。


echoのエラーが消えた


makeのエラーはCygwinをインストールする? FAQMake sure you have installed 'make' tool through Cygwin's installer.

cygwin64をインストールしてもmake.exeがなかった

こちらにmake.exeのインストールの記事

cygwin_setup-x86_64.exe から再度インストール。途中でインストールするファイルを選択するところがあった。


これでmake.exeが出てきた

make.exeのあるフォルダをPATH指定して

設定を有効にするために、再起動して、eclipseでコンパイルしたらmake PATHがないというエラーも消えた




コンパイルしてできたbinファイルをmbedLPC1768にコピーしたら動いた。

mbedLPC1768をつないでdebugしてみようとしたがつながらない・・・
疲れたのでここで中断。


<mbed(LPC1768)>

mbedのファームウエアをCMSIS-DAP対応に書き換える必要がある。
mbed LPC1768をMDK-ARMでデバック を参照

こちらからfirmware(rev141212)をダウンロードして、mbedにコピー。USBを抜き差しすればOK
USB-Serial driverも最新にしないとCMSIS-DAPが見えないそうです。ドライバ

設定-デバイス-接続中のデバイス で確認できる。


あっ動いた


2016年12月21日水曜日

(経過報告)MDX-15/20のコントローラをmbedLPC1768でつくる

これはmbed Advent Calendar 12/22の記事です。

<mbed LPC1768でやったこと>

年明けにMDX-20を購入しました。


それまではiModelaを使っていたので、



これと同じような作業環境を求めていろいろ調査していました。

MDX-20を使う
fusion360のCAMデータをMDX-15/20で使用する
MDX-15/20のCOM端子解析


MDX-20付属のアプリでは、板材からの部品の切り出し(CADで設計してCNCで出力)するようなことは想定していないため、fusion360で設計し、原点設定と、Gコード、RMLコードを出力するアプリを探して環境を整えてきました。

ただし、下記3点の不満は解消できません。

1.細かな原点調整ができない(特にZ軸)
2.制御用パソコンが占有される
3.パソコンとMDX-15/20の接続がCOM経由で、データフロー制御を行う
 最近のPCにはCOMポートがない。またUSB-Serial変換でフロー制御を行えるものは少ない

”1”については、探し出したパソコンアプリで対応できるのですが、ロータリーエンコーダでの操作感にはかないません。専用のコントローラも用意されていないので、MDX-20を直接制御して解決できないかと考えました。

幸い、MDX-20への指示はCOMポートで入力し、コマンド体系もRML言語として公開されていたので、解析は容易でした。

3か月くらいかかりましたが、以下の仕様のコントローラが完成しました。

1.ロータリーエンコーダによる原点調整
2.切削開始原点(ユーザ原点)の設定
3.制御用パソコン不要(USBメモリから切削データを受け取る)
4.ドリルの現在位置をmm表示する



今のところブレットボードで組んだ状態ですが、自分用で1台あればよいのでユニバーサル基板で本組します。







設計データを残すために回路図CADでのPCBデザインまで作業します。
(ハード、ソフトのデータは全部の作業が終わってから公開します)

おおむねの予定は、
1月:ユニバーサル基板での組み立て
2月:PCBデザイン検討
3~8月:プリント基板の製造、動作確認(現状予定なし)

プリント基板の製造は考えていませんが、おおむね10枚以上の希望があれば検討します。
その場合の予価ですが、

1.プリント基板のみ:4000円
2.プリント基板+部品:3万円
3.完成品:4万円

買いたいという人がいれば、このブログにコメントを入れておいてください。

2016年11月20日日曜日

デバック用print文記述いろいろ

C言語でのプログラムで、デバック用のprint文の扱いをこれまで、ifdefでやっていてprint文と合わせて3行になって見栄えが悪いと感じていました。

-例--------
#ifdef DEBUG
printf("debug \n");
#endif // DEBUG
-----------

mbedのlibraryを見ていたらスマートな方法で対応していました。

UART access over BLE
---------------------------------
#define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
* it will have an impact on code-size and power consumption. */

#if NEED_CONSOLE_OUTPUT
#define DEBUG(STR) { if (uart) uart->write(STR, strlen(STR)); }
#else
#define DEBUG(...) /* nothing */
#endif /* #if NEED_CONSOLE_OUTPUT */
-----------------------------


などが出てきました。

"デバック256"を参考に、
-------------------------
#define DEBUG
#ifdef DEBUG
#define DEBUG_PRINT(...) printf(__VA_ARGS__)
#else
#define DEBUG_PRINT(...)
#endif // DEBUG

                strcpy(fileName, p->d_name);
                DEBUG_PRINT("detect = %s\n",fileName);
                ans = true;
------------------------
こんな感じで使ってみました。