macsbug

Just another WordPress.com site

Archive for the ‘Apple’ Category

USB ISOLATOR

leave a comment »

iMac の USB を 保護する為に USB ISOLATOR を使用しています。  2017.03.01
USB ISOLATOR は USB インターフェース を遮断するアダプターです。
電源は 外部電源から供給され 電子工作に集中する事ができます。

通常 USB の最大電流は 500mA で 電子工作で 使用する ESP8266 や ESP32
ESP-WROOM-32 は 消費電流 や 突入電流 が 非常に大きいとの話を聞いています。
場合によっては 接続している iMac の USB が壊れるかも知れません。
基板 中央の16pin IC で iMac 側と ESP 側が完全に遮断され 信号のみが伝わります。
消費電力の大きい ESPの電源は AC アダプター から供給され 安全になります。
技術的な理解はともかく 高価な iMac を壊さない為に使用し安心です。


.
ESP32 ( ESP-WROOM-32 ) の 消費電流 の 調査と分析:
_ 電源の波形解析や詳細な調査をされ対策も記載されている記事があります。
_ 何度も読み直す程の内容があり 多大な努力に驚嘆しています。感謝!!
_ 是非、「ねむいさん」氏 と「mgo-tec」氏 の記事をお読み下さい。
_ その辺の技術書より 遥かに面白く 読み応え充分です。

ねむいさんのぶろぐ:
ESP-WROOM-32を使ってみる2 -そんな電源で本当に大丈夫か-
_ 丁寧な波形測定と解説は見事で改善策のデバイスの選択も素晴らしい。
:
mgo-tec電子工作:
ESP-WROOM-32 ( ESP32 )の消費電流を電流プローブ無しで測定してみました
ESP-WROOM-32 (ESP32) の 電流 測定 その2
_ 前回にも増して波形測定に工夫をされ のめり込む程の内容に驚きます。


.
保護回路:
iMac の USB回路の入力には ポリスイッチ と言う保護素子がついています。
過大な電流が流れると 動作して オープン になり後段の回路を保護します。
記憶能力があり電源を切っても しばらく オープン状態 を保持しています。
この為に 再起動すると動かない場合があり 電源を切り 30分とか1時間後
とかに復帰し 起動が可能になります。

知らずとUSB端子をショートする場合もありますので良いかと思います。
周囲からのノイズ やスパイクを取り除き オーディオには効果があります。

古くは FireWire ポートの話もあります。
RATOC:Macの本体標準 FireWire ポートのご使用に関して


.
購入:条件 は 電源が別 である事。
_ ebay:ADI ADUM4160 USB Isolator:価格:GBP 15.99、2235円。
_ 上記画像の製品は どのくらいの性能があるか評価はしていません。
_ 別電源が無い低価格の物は 使用しない事。
_ 下記の「USB Isolator USB-01」と比べるとかなり見劣りします。

国内販売: 以下の製品が理想的です。この製品は他の回路を圧倒しています。

アナログ回路のおもちゃ箱:USB Isolator USB-01:完成品:6.640円
_ 電源アダプターは 別途 用意されています。
_ 外部電源 (+6VDC) 供給時 は 低雑音LDO の ADP3338 から クリーンな
_ 5V・1Amax.を出力。
_ USBのデータ・ラインには サージ対策 及び ノイズ対策。
_ GNDパターンやレイアウト、部品点数を見ると細かな配慮がされています。
_ メモ:以下の基板のGNDパターンの作り方に注目してください。

日本アマゾンで他の製品を調べると 数万円と高いです。


.
「アナログ回路のおもちゃ箱」:

_ 「アナログ回路のおもちゃ箱」氏の 技術力は 超ハイレベルです。
以下の記事は今回の電源問題やUSBの件で詳細に分析され設計・製作もされています。

アナログ回路のおもちゃ箱:
USB Isolator:PCのUSBポートと接続される周辺機器を絶縁します。

USBコネクターからの電源供給(1):外部からクリーンな電源をDACに供給。

USBコネクターからの電源供給(2):TPS7A4700内蔵USBコネクター。

USB Isolator for Analog Discovery:Analog Discoveryでスペクトラム観測。

突入電流制限可能なHigh Side P-Ch MOSFET Switch:突入電流を抑える実験。

USB コネクター と 線の長さ:「アナログ回路のおもちゃ箱」氏の 話では
_ USBケーブルで最も良いのは 一番古い 四角いコネクター との事。
_ 理由は コネクターによって 電流容量 が違うとの事です。
_ USB の線の 太さや 長さ は重要で 太く短い物 を使用する必要があります。
_ Analog Discovery を使用する時は ISOLATOR の件もありますが 10cm 程の
_ 長さで iMac 本体に直接接続すると良いとアドバイスしています。

ESP8266 最強の電源:
_ 氏からは ESP8266の最強の電源 を設計製作、計測する方法を教わりました。
_ 測定方法は 氏のページにもありますが SMA Connector を直付けし最短距離。
_ にする事です。試してみると その通りでした。
_ 


.
感想:
USBケーブル:ESP8266 や ESP32 を接続するには USB ワイヤーは 太く短い
_ ケーブルを使用する事が大切です。例として消費電力が大きい場合は 百均
_ の細いUSBケーブルでは 動作しなくなる事を経験しています。
_ ワイヤーの太さ(抵抗値) が如何に電力に影響があるか解ります。
_ オームの法則:V= I * R で R(抵抗)があり I(電流)が大きいと影響が大です。

USB ISOLATOR: 価格が気になりますが iMac 本体価格よりも安いです。
_ 過去に iMac が再起動しなくなり 3時間とか半日於いて起動すると復帰した
_ 経験があります。原因はいろいろありますが結果的にポリスイッチが動作
_ した為と判断しています。iMac は高価ですから USB 入力端子を壊して
_ 修理すれば マザーボード交換 か 新規購入 しか手だてはありません。
_ それを考慮すると少しは高価でも USB ISOLATOR を接続する方が
_ 20〜30万の費用削減になると思います。

ESP32 ボードの設計:
_ 国内でアダプターボードや開発基板を設計・開発されている時期ですが
_ 「ねむいさん」氏 と「mgo-tec」氏 が示す 技術的検討を充分されて
_ 進めて頂きたいと希望しています。特に GND が如何に重要かですね。
_ 3月現在までの国内販売のアダプターボードを見ると まさかと思う位の
_ 悲惨な設計内容です。
_ 是非、技術力を高め 海外にも販売できる高性能な製品を期待しています。

注目するESP32開発ボード:「魔法の大鍋」ESP-WROOM-32のブレイクアウトボード
_ Make Faire Tokyo等で「超小型ドローン」を展示し各社の開発陣に販売する
_ 程の有名な「魔法の大鍋」氏が microSD付の ESP-WROOM-32の両面実装
_ ブレイクアウトボード を製作中です。氏は多層基板や超小型部品の基板も
_ 製作できるハイレベルの方です。現在 設計変更を含めた前段階で 完成までの
_ ツメの方法を熟知しています。なんと秋月でESPが販売されて直ぐ取りかかっ
_ たとの事でスピード感も素晴らしい方です。


Written by macsbug

3月 1, 2017 at 8:20 am

カテゴリー: Apple, ESP32, ESP8266

Weather meter on iPad

leave a comment »

iPad を気象計にしました。                                                         2017.01.29
構成は ESP8266 + BME280 + iPad Pro + TouchOSC です。


.
費用は 既に ハードをお持ちでしたら TouchOSC アプリのみで 600円 です。
構成は ESP8266(881円) + BME280(442円) + TouchOSC(600円) で総計1923円です。
ESP8266 に接続した BME280 温度、湿度、気圧センサーの値を iPad へ表示します。

左上:緑のLEDは TouchOSC が受信し処理中を示しています。
右上:時刻表示。その左:バッテリー量。その左:表示装置のテストボタン。
左下:スライドバーで ESP8266 に接続している LEDランプの明るさを変えます。
_  下にあるトグルスイッチは 出力を スライドバーか温度に切り換えます。
_  温度の場合は ESP8266 に接続している LED の明るさが温度で変化します。
中央:温度、湿度、気圧は デジタル表示とロータリーのアナログ表示にしました。


.
TouchOSC
iPad や iPhone , Android のタッチインターフェースを利用して トグルスイッチ、
プッシュスイッチ、フェーダー、ロータリーフェーダー、XYパッド、ラベル、LED
などを、様々な大きさで、いくらでも画面に配置し、ESP8266 と連携させ 表示装置
や コントロール装置を 楽しく容易に作る事ができます。
双方向通信: iPad Wifi と ESP8266 Wifi 間で 双方向通信 が可能です。
.
TouchOSC Editor:iPad の画面作りをします。
ご自身のデザインで「世界で1つだけのパネル」が作れます。
画面のデザインは iMac の TouchOSC Editor で行います。( Win, Linux 用もあります)
以下の画面にある部品が用意されておりドラッグ&ドロップで作ります。
「部品配置」と「部品名称」と「動作数値」を入力するのみで「プログラムは不要」。
ESP8266 は今回のサンプルで短時間に作り、デザインに時間をかけると見事なパネル
が出来ます。奇麗な仕上がりは 楽しく美しさが出てきます。
素敵な「上島珈琲」や「スタバ」で 優雅な気分で過ごせます。


.
準備:ESP8266 + BME280 + TouchOSC で 1923円。
1. ESP8266 with TELEC:881 円。
2. BME280センサー:ebay で 442円。
3. LED:必要に応じて装着。D1 mini は 本体に LED が着いています。
4. iPad pro, iPad, iPhone, Androide:既にお持ちの物を使用します。0円。
5. github:CNMAT / OSC:ダウンロードしライブラリーへ入れる。Adrian Freed氏に感謝。
6. iPad アプリ:TouchOSC:600円。
7. TouchOSC Editor:Mac OS X。0円。マックの編集アプリです。上記 TouchOSCに記載。
_  
ESP8266 + BME280 のハードの構成は 以下を参照ください。
macsbug:ESP8266+BME280+OLED+BOX
macsbug:ESP8266 + AE-BME280 + ThingSpeak
macsbug:ESP8266+BME280+IR LED+Air Con+ThigSpeak
macsbug:Environmental Sensor (環境センサー)


.
TouchOSC Editor:
参考:hexler.net:TouchOSC | Editing layouts
_  YouTube:OSC Tutorial #1
iMac TouchOSC Editor で作成した レイアウト は WiFi (LAN経由) で iPad ( Layout, add )
_  へ 即 転送できます。


.

信号の流れ:

①:I2C で計測を要求。 ②:計測。 ③:計測値を I2C で送る。
④:ESP8266でOSC信号に変換する。 ⑤:WiFi UDP で直接通信する。
⑥:OSC:名前から Control interface を選択し 数量表示 又は 文字表示する。

UDP通信: ESP8266 と iPad 間の 直接通信を 行います。
_ macsbug:Communicate ESP8266 and iPad directly with UDP を参照してください。

ライブラリー:

#include <OSCMessage.h>
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>

TouchOSC:受信する方法。
_ 1. OSCMessage mIN
_ 2. udp.parsePacket())>0 で受信。
_ 3. mIN.route ( 部品名, サブルーチン);
_ 4. 部品毎の操作を行う。 トグルスイッチ や LEDの操作方法 を参照の事。

#include <OSCMessage.h> 

OSCMessage mIN;
int size;
if((size = udp.parsePacket())>0){
 while(size--)
  mIN.fill(udp.read());
   if(!mIN.hasError()){
    mIN.route("/1/push1", test);              // ** iPad -> ESP8266 **
    mIN.route("/1/fader", led_fade);          // ** iPad -> ESP8266 **
    mIN.route("/1/toggle",led_temp);          // ** iPad -> ESP8266 **
   } 
} 

TouchOSC:送信する方法。
_ 1. OSCMessage msg ( 部品の名前 );
_ 2. msg.add ( 数値 又は 文字 );
_ 3. UDP 送信。

OSCMessage msg(c);                             // c = name
msg.add(d);                                    // d = value
udp.beginPacket(udp.remoteIP(),txp);           // udp
msg.send(udp);                                 // udp
udp.endPacket();                               // udp end 
msg.empty();                                   // OSC end

トグルスイッチの操作方法:

mIN.route("/1/toggle",led_temp); 

void led_temp(OSCMessage &msg, int addrOffset){  // toggle
  int ledState = (boolean) msg.getFloat(0);      // get state of toggle
  if ( ledState == 1 ){ ind = 1;}                // fader switch on
  if ( ledState == 0 ){ ind = 0;}                // fader switch off
}                                                //

フェーダーの操作方法:

mIN.route("/1/fader", led_fade); 

void led_fade(OSCMessage &msg, int addrOffset){  // fader
  ledValue = msg.getFloat(0);                    // get value of fader
  if (ind == 1){analogWrite(led, ledValue);}     // BUILTIN_LED controll
}                                                //

LEDの操作方法:

led_sw( "/OnOff/led9", "ON");

void led_sw(char led[], String sw){
  float v;
  if ( sw == "ON" ){ v = 1.0 ;}
  if ( sw == "OF" ){ v = 0.0 ;}
  OSCMessage msg(led);
  msg.add(v);
  Udp.beginPacket(Udp.remoteIP(),txp);
  msg.send(Udp);
  Udp.endPacket();
  msg.empty();
}

ESP8266 スケッチ:
上記の様に モジュールを コピー&ペースト すると 短時間に簡単 に出来ます。


.
参考:
1. h e x l e r . n e t | TouchOSC:TouchOSC の 本家です。
2. github:CNMAT / OSC:OSCライブラリーがあります。
3. facebook:TouchOSCでプロジェクションマッピングもできています。
4. TouchOSCとOSCuino:丁寧に説明しているサイト。
5. YouTube:Controlling a dc motor with ESP8266-12E + TouchOSC:リスト未公開。
_  ESP8266 でモーターコントロール:今回の送受信の方法で可能です。
6. YouTube:esp8266 OSC spotlight:リスト未公開。
_  ESP8266 でロボットコントロール:今回の送受信の方法で可能です。
7. YouTube:controlling an Arduino with an iPad:Fader が高速で動き
_  アナログアナライザーが出来ています。
8. fabifiess / NodeMCU_OSC
9. Tuna Knobs
_ 


.
感想:
1. 過去の記事:以下では TouchOSCでの 受信方法が不明で 出来ませんでした。
_  macsbug:ESP8266 for Arduino ことはじめ。
_   ESP8266 で受信方法を公開されているサイトは見つかりませんでした。
_   YouTube:受信し画面表示している例があり可能な事が判明しました。
_   ただし YouTube では リストは公開されていません。
_   最も丁寧に説明されているサイトがありました。TouchOSCとOSCuino
_  この記事を基に 林 伸夫氏が UDP方式変換とOSCを連結し動作が可能になりました。
_  林 伸夫氏に感謝!
2. 表示装置:現在 ESP8266で実現している TFT解像度は 340×240 が限界です。
_   iPad Proなら 2048×2732 の高解像度を電子工作で利用できる訳です。
3. 工作時間:パネルのデザインをするだけで表示装置が完成します。
_  これをHTMLで記述する事は恐らく無理です。
4. メモ:BME280 ライブラリー:
_   BME280_MOD_1022.h と BME280_MOD-1022.h とがあり注意が必要。
_   – が使用され Arduino IDE のバージョンによりエラーが出る時があります。
5. ライブラリー:受信の メッセージ ライブラリーを作り始めました。
_   少し出来て動き始めましたが、これではダメな事に気づきました。
_   ライブラリーは OSCMessage だけでは無く 他の機能も必要です。
_   実際 github:CNMAT / OSCを見ると OSCBundle, OSCData, OSCMatch, OSCTiming 等
_  の機能が必要である事。よって 上記のOSCライブラリを使いこなす事ですね。
6. 事例:ESP8266 に接続している LED を PWM コントロールできる装置、
_   XL4001(387円)。秋月:LEDドライバモジュール (140円) を使用して 部屋
_  のライト等をコントロールする事ができます。
7. UDP直接通信:
_   照明器具をネット経由で操作するものがありますが ふと疑問に思います。
_   「何故 目の前のライトをネット経由で操作する必要があるのか」
_   手で直接操作するか UDPで直接通信すれば良いのではと思っています。
_   温度変化をネット経由でグラフ化できる ThingSpeak も経験してみました
_   が 日常生活では さほどグラフを見る必要性が無い事を体験しています。
8. 美しさ:
_  電子工作の完成品は 見た目 奇麗でない場合が多いですが、表示を iPad や
_  iPhone にして素敵なデザインをすると 見事に奇麗なものが出来ます。
_  機能も大切ですが デザインはそれ以上に大切かと思っています。 


.
TouchOSC のリスト:GitHub を使用していない為、リストアップできません。
以下を参考に「素敵なデザイン」を組み上げてください。
右上の Tx は TouchOSC の送信ランプ、Rx は受信ランプです。
Tx は送信時「緑」に点灯、Rx は受信時「赤」に点灯します。

左上から右下に Control interface の内容を列記します。

LED:led,0,1
Label V:Color=Brown,Text="Temp,,,",Size=32
Push Button:Name=push1,Color=Gray,Value Range=0 To 1
Battery V:Color=Green,Outline,Size=24
Time V:Color=Orange,Outline,Size=24
Label V:Name=disp,Color=Gray,Size=24
fader V:NAme=fader,Color=Brown,Value Range=1023 To 0
Toggle Button:Color=Brown
Rotary V:Name=tr,Color=Red,Value Range=0 to 40
Label V:Text="Temp,,",Color=Brown,Size=32
Label V:Name=t,Color=Red,Text=88,Size=66
Label V:Text="Humi,,",Color=Brown,Size=32
Rotary V:Name=hr,Color=Green,Value Range=20 to 60
Label V:Name=h,Color=Green,Text=88,Size=66
Label V:Text="Pres,,",Color=Brown,Size=32
Rotary V:Name=pr,Color=Blue,Value Range=990 to 1030
Label V:Name=p,Color=Blue,Text=88,Size=66
Label V:Color=red,Text=0,Size=24

.
ESP8266 スケッチ:
1. SSID は各自好みの名前にしてください。
2. ESP8266 に接続する LED のピン番号は 各自の使用GPIOにしてください。
_  int led = BUILTIN_LED;
3. ESP8266 に接続する BME280 のピン番号は 各自の使用GPIOにしてください。
_  Wire.begin(SDA, SCL);
_  5sec 毎に送信します。必要に応じて 初期値の rm = 5000 を変えてください。
4. UDP送受信の PORT 番号は好みの数値に変更可能です。
_  ESP8266 と iPad TouchOSC の outgoing と incoming を合わせてください。
.

// ESP8266 + BME280 + TouchOSC + iPad            // 2017.01.29 macsbug
// BME280 : Temperature,Humidity,Pressure Sensor //
// UDP communication
// ESP8266(ip:192.168.4.1,port:9000) transmit ---|
// ipad   (ip:192.168.4.2,port:9000) receive  <--|
// ipad   (ip:192.168.4.2,port:8000) transmit ---|
// ESP8266(ip:192.168.4.1,port:8000) receive  <--|
#include <BME280_MOD_1022.h>                     // BME280_MOD-1022.h
#include <Wire.h>                                //
#include <OSCMessage.h>                          //
#include <ESP8266WiFi.h>                         //
#include <WiFiUDP.h>                             //
static WiFiUDP udp;                              //
const char *ssid = "a10";                        // SSID
const char *pass = "";                           // password
#define rxp 8000                                 // ESP Rx Port:TouchOSC=outgoing
#define txp 9000                                 // ESP Tx Port:TouchOSC=incoming
IPAddress ESP8266_IP;                            // ESP8266 IP = 192.168.4.1
IPAddress ipad_RX_IP;                            // iPhone  IP = 192.168.4.2
long ta =  -5.3;                                 // temperatue adjust
long ha = +16.7;                                 // humidity   adjust
long pa =  +3.5;                                 // press      adjust
int rt,count,rm = 5000,ind = 0;                  // time count, 5sec
int led = BUILTIN_LED;                           // 15 BUILTIN_LED
float ledValue = 1023;                           // led fader

void setup(){                                    //
  pinMode(led, OUTPUT);                          // GPIO Conttroll
  analogWrite(led, 1023);                        // LED Illuminance OFF
  Serial.begin(115200);Serial.println();         //
  //---------------------------------------------// BME280 setup
  Wire.begin(D6, D7); delay(10);                 // SDA, SCL 12,13
  BME280.readCompensationParams();               // read the NVM param
  BME280.writeOversamplingTemperature(os1x);     // 1x over sampling
  BME280.writeOversamplingHumidity(os1x);        // 1x over sampling
  BME280.writeOversamplingPressure(os1x);        // 1x over sampling
  //---------------------------------------------// WiFi setup
  WiFi.mode(WIFI_AP);                            // AP setup
  WiFi.softAP(ssid, pass);                       //
  ESP8266_IP = WiFi.softAPIP();                  // 192.168.4.1  localIP
  udp.begin(rxp);                                // iPad -> ESP8266 Rx Port
  rt = millis();                                 // save time
}                                                //
 
void loop(){                                     //
  OSCMessage mIN;                                //
  int size;                                      //
  if((size = udp.parsePacket())>0){              //
   while(size--)                                 //
    mIN.fill(udp.read());                        //
     if(!mIN.hasError()){                        //
      mIN.route("/1/push1", test);               // ** iPad -> ESP8266 **
      mIN.route("/1/fader", led_fade);           // ** iPad -> ESP8266 **
      mIN.route("/1/toggle",led_temp);           // ** iPad -> ESP8266 **
     }                                           //
  }                                              //
  count = int( millis() - rt );                  // read time
  if ( count > rm ){                             // time check
    sensor();                                    // ** ESP8266 -> iPad **
    count = 0; rt = millis();                    // reset time
  }                                              //
}                                                // 

void tx(String s, float f, int t ){              // OSCMessage + UDP
  char c[12];                                    // char
  int len = s.length() + 1;                      // string length
  s.toCharArray(c, len);                         // c = string to char 
  OSCMessage msg(c);                             // name
  msg.add(f);                                    // value
  udp.beginPacket(udp.remoteIP(),txp);           // udp
  msg.send(udp);                                 // udp
  udp.endPacket();                               // udp end 
  msg.empty();                                   // OSC end
  if ( t != 0 ){ delay(t);}                      // delay
}                                                //

void txchr(String s, String f, int t ){          // OSCMessage + UDP
  char c[12], d[40];                             // char
  int len = s.length() + 1;                      // string length
  s.toCharArray(c, len);                         // c = string to char 
  len = f.length() + 1;                          // string length
  f.toCharArray(d, len);                         // c = string to char 
  OSCMessage msg(c);                             // name
  msg.add(d);                                    // value
  udp.beginPacket(udp.remoteIP(),txp);           // udp
  msg.send(udp);                                 // udp
  udp.endPacket();                               // udp end 
  msg.empty();                                   // OSC end
  if ( t != 0 ){ delay(t);}                      // delay
}                                                //

void sensor(){                                   //
  //---------------------------------------------// BME280 sensor
  BME280.writeMode(smForced);  delay(50);        // chip goes back to sleep
  while (BME280.isMeasuring()){delay(50);}       // BME280 check
  BME280.readMeasurements();                     // read out the data
  float t = BME280.getTemperature()+ta;          // Temperature
  float h = BME280.getHumidity()   +ha;          // Humidity
  float p = BME280.getPressure()   +pa;          // Pressure 
  int   c = int(millis()/1000);                  // count
  //---------------------------------------------// 
  tx( "/1/led",    1 , 300 );                    // LED ON
  tx( "/1/t",  int(t), 300 );                    // Temperature digital
  tx( "/1/h",  int(h), 300 );                    // Humidity    digital
  tx( "/1/p",  int(p), 300 );                    // Presuure    digital
  tx( "/1/tr",     t , 300 );                    // Temperature roter
  tx( "/1/hr",     h , 300 );                    // Humidity    roter
  tx( "/1/pr",     p , 300 );                    // Presuure    roter
  if (ind==0){analogWrite(led,1023-t*1023/40);}  // temp -> led
  if (ind==1){analogWrite(led,ledValue);}        // temp -> led
  tx( "/1/led",    0 , 300 );                    // LED OFF
  //---------------------------------------------//
}

void test(OSCMessage &msg, int addrOffset){      //
  txchr("/1/disp", "Indicator Test",50);         //
  for(int i=   0;i<=  41;i++){tx("/1/t" ,i,50);} //
  for(int i=  40;i>=   0;i--){tx("/1/t" ,i,50);} //
  for(int i=  20;i<=  60;i++){tx("/1/h" ,i,50);} //
  for(int i=  60;i>=  20;i--){tx("/1/h" ,i,50);} //
  for(int i= 990;i<=1030;i++){tx("/1/p" ,i,50);} //
  for(int i=1030;i>= 990;i--){tx("/1/p" ,i,50);} //
  for(int i=   0;i<=  40;i++){tx("/1/tr",i,50);} //
  for(int i=  40;i>=   0;i--){tx("/1/tr",i,50);} //
  for(int i=  20;i<=  60;i++){tx("/1/hr",i,50);} //
  for(int i=  60;i>=  20;i--){tx("/1/hr",i,50);} //
  for(int i= 990;i<=1030;i++){tx("/1/pr",i,50);} //
  for(int i=1030;i>= 990;i--){tx("/1/pr",i,50);} //
  txchr("/1/disp", "",50);                       //
}                                                //

void led_fade(OSCMessage &msg, int addrOffset){  // fader
  ledValue = msg.getFloat(0);                    // get value of fader
  if (ind == 1){analogWrite(led, ledValue);}     // BUILTIN_LED controll
}                                                //

void led_temp(OSCMessage &msg, int addrOffset){  // toggle
  int ledState = (boolean) msg.getFloat(0);      // get state of toggle
  if ( ledState == 1 ){ ind = 1;}                // fader switch on
  if ( ledState == 0 ){ ind = 0;}                // fader switch off
}                                                //

Written by macsbug

1月 29, 2017 at 1:56 pm

カテゴリー: Apple, ESP8266

YEN rate displayed in Pythonista3

leave a comment »

円レートを iPad に表示するアプリを Pythonista 3 で作りました。      2016.09.24

1ドルを円に換算した値を表示し ” 101.1 ” と音声で知らせ、数値の変化をグラフ表示します。



 

海外(ebay)の部品を購入する時にブラウザーで円レートを見て購入しています。
毎回 アクセスするのは面倒ですので iPad に表示するアプリを作りました。
円高のタイミングに購入し 安くできると いいかなと思っています。


 

機能:
1、1ドルに対する現在の円レートを表示し、金額を「音声」で知らせてくれます。
2、1日、5日、3ヶ月、1年、2年、5年間のグラフを順次表示します。
3、間隔を置いてリアルタイムに表示します。


 


感想:
たいしたソフトではありませんが自分で作った物が動くと楽しいものです。
基本は「為替レート変換君」のデーター取得先を使用しています。
リンク先のデーターをテキストフィールドやウエブビューに表示するものです。
音声で金額を教えてくれるのはチョットいい感じです。

 


レイアウト:Script with UI での配置です。


スクリプト:


import requests
import ui
import time
import speech
import sound

def web(url):
	re = requests.get('http://fx.monegle.com/fx.php?rate=1&q=USD')
	d1 = str(re.text)
	d2 = d1.find('Bid:')
	d3 = d1[d2+4:d2+4+8]
	v['textfield1'].text = str(round(float(d3),2))
	sound.play_effect('Ding_3')
	speech.say(str(round(float(d3),1)))
	for i in range(6):
		v['textfield2'].text = str(url[i][47:49]).upper()
		v['webview1'].load_url(url[i])
		time.sleep(5)
	v['textfield2'].text = str(url[2][47:49]).upper()
	v['webview1'].load_url(url[2])

# setup
url = ['http://ichart.finance.yahoo.com/z?s=USDJPY=X&t=1d&l=on&z=m&a=v&p=s&q=1',
       'http://ichart.finance.yahoo.com/z?s=USDJPY=X&t=5d&l=on&z=m&a=v&p=s&q=1',
       'http://ichart.finance.yahoo.com/z?s=USDJPY=X&t=3m&l=on&z=m&a=v&p=s&q=1',
       'http://ichart.finance.yahoo.com/z?s=USDJPY=X&t=1y&l=on&z=m&a=v&p=s&q=1',
       'http://ichart.finance.yahoo.com/z?s=USDJPY=X&t=2y&l=on&z=m&a=v&p=s&q=1',
       'http://ichart.finance.yahoo.com/z?s=USDJPY=X&t=5y&l=on&z=m&a=v&p=s&q=1',
       'http://ichart.finance.yahoo.com/z?s=USDJPY=X&t=3y&l=on&z=m&a=v&p=s&q=1']
v = ui.load_view('_en')
v.background_color = '#d3dad7'
v.present('sheet') 

# main
while True:
	web(url)
	time.sleep(60)


Written by macsbug

9月 24, 2016 at 7:50 am

カテゴリー: Apple, Pythonista

Pythonista Beginner : Part 3

leave a comment »

GitHubから repo をダウンロードする方法。「GitHubGet.py」を試す。 2016.08.28


GitHubGet.py」は、クリップボードに URL をコピーし実行 すると
自動的に目的のファイル ( 例:GitHubGet-mester ) ができます。


経緯:
Pythonista Beginner : Part 2で 使用した「github_download.py」は
クリップボードにURLをコピーして 実行しますが 入力や解凍操作が必要でした。
「GitHubGet.py」はクリップボードに URL をコピーのみでダウンロードします。


入手方法:「GitHubGet.py」を入手する。
_ 初回は直接「GitHubGet.py」をコピーするか
_ Pythonista Beginner : Part 2の「github_download.py」の方法で入手します。


事例:jsbain の Audio.py をダウンロードしてみます。
_ Audio.py の URL をコピーする。
_ GitHubGet.py を実行する。
_  メモ:Pythonista 3 の場合は 事前に Python 2 to 3 の変換を実行しておく事。
_ 2cf4998… ファイルができ ファイルの中には Audio.py ができます。



感想:
「GitHubGet」を公開された jsbain に感謝致します。
先人達が素晴らしい多くの実例やサンプルを公開されており感謝致します。
これらの実例やサンプルは ほとんど紹介されていない為に 備忘録としました。


 

Written by macsbug

8月 28, 2016 at 1:02 am

カテゴリー: Apple, Pythonista

How to install OS X

with 2 comments

OS X をインストールする方法。                2016.08.23


OS Xを HDに作成すると以下の様なメッセージがでて インストールが動作しません。
「アプリケーションを検証できません」の意味が解りません。
「ダウンロード中に破損したか不正に変更された可能性があります」には
_ ちょっと たじろぎましたが これは正しくない表示ですね。
「このアプリケーションを削除してから、Mac App Store の購入済み”ページ
_ にアクセスして新しくダウンロードしてください」
_ えっ、削除したりダウンロードしたり そんな面倒な事をするのですか。


原因:アプリケーションが真性なものであるかどうかを検証する為の証明書を
_  アップルが変えてしまった為です。

方法:
1. App Storeでもう一度ダウンロードする。
_  ダウンロードは1時間半くらいかかります。
_  購入記録から削除されている場合 この方法は実施できません。
.
2. マックの日付を変更し 次に OS X Maverics インストール(例) を使用する。
_  準備:各 OS X インストールを用意してください。(一番上の画像)
_  環境設定で日付を2016年2月1日に変更してインストールを動かします。

以上で インストールは動作し30〜50分程度で準備ができインストールできます。

インストール後は環境設定の日付を もとに戻しておきましょう。


感想:
1. OS X を HD に作る事は少ないので知りませんでした。
_  これは2016年2月頃の話なのですね。
2. App Store から DL する時に 購入記録を探し難く 迷いました。
_  友人の場合は 購入記録から削除されて DL できない状態がありました。
3. ターミナルで日付の変更をする方法がありますが 素人には分かり難いです。
4. 各バージョンの OS X インストールは保存しておいた方が良いですね。
_  私は全ての OS X インストールを保存しておき それを使用しました。
5. アップルさん 面倒な事しないで欲しいです。
6. 購入記録が削除されている場合 と OS X インストールが無い場合は
_  どうするのでしょうか。

Written by macsbug

8月 23, 2016 at 2:28 am

カテゴリー: Apple

Pythonista Beginner : Part 2

leave a comment »

GitHub の ファイル を Pythonista 3 に ダウンロード する方法。    2016.08.15



.
編集では ネット上のファイルを ダウンロードする場面が多くあります。
ダウンロードの操作方法は 手間で 時間を費やす事もあります。
xxx.py と xxx.zipスクリプトでダウンロードする方法をまとめました。
これによりファイル操作が容易になり 開発がスムーズに行えます。


概要:
1. ファイルの種類: 「xxx.py」「xxx.pyui」「xxx.zip」があります。
2. スクリプトで入手: 「github_download.py」を使用します。
3. URL: URL を入力するとファイルが ダウンロード されます。
4. 結果: xxx.py や xxx.pyui ができます。zip は xxx.zip ができます。
5. 場所: 作成されるファイルの場所は 「githib_download.py」の場所か
_      Shared Folderに出来ます。
使用環境:
_ iPad 3 iOS 9.3.3 + Pythonista 3 ( 有料:1200円)
_ iMac 27int OSX 10.8.5


 項目: 方法は以下の4つの手順です。
1. ファイルの URL を取得します。
2. github_download.py:このスクリプトでファイルをダウンロードします。
3. github_download.py を実行します
4. ダウンロードの結果と zip ファイルの解凍。


 方法:
1. ファイルの URL を取得します。
_  xxx.py を直接示す URL 又は RW ボタンを開いた時の URL です。
_  以下の様に コピーすると簡単です。URL はクリップボードに入ります。

_ zip File の場合は 以下の様に URL をコピーすると簡単です。

 


 2. github_download.py:このスクリプトでファイルをダウンロードします。
_  参考:bin フォルダー:Pythonista Beginning:
_   2. ptinstaller.py を iPad (Pythonista) に読み込む。
_   最下部に「おさらい:ptinstaller.py の入手と bin フォルダーの作成方法」
_  参考:Pythonista-Tools / Pythonista-Tools / github_download にある。

bin フォルダーの中にある
「github_download.py」
を動かします。

github_download.py の場所:
bin /
GitHub Tools /
github_download /
github_download.py

 


 3. github_download.py を実行する
_ 直前にURLをコピー済みの時は入力欄への入力は不要です。以下の様に
_ 入力済みになっています。末尾に .py や .zip がある事を確認します。
_ その後「Download」と「OK」を選択するだけになります。

方法1で既にURLをコピー済み
の場合はURL欄への入力は不要。
.
未入力の場合はURLを入力し
「Download」を選択する。
方法1で既にURLをコピー済み
の場合はURL欄への入力は不要。
.
未入力の場合は名前を入力し
「OK」を選択する。
zip は名前に「.zip」を付ける。
スクリプトは「.py」を付ける。

 4. ダウンロードの結果と zip ファイルの解凍:

master.zip が 保存されました。
zip の解凍方法:
Extract Archive… ボタンを押すと
解凍され master というフォルダー
が出来ます。フォルダーの中は
xxx.py 等が できます。

 


 補足: スクリプトのチェック方法

マークを選択。
Python 2 to 3 を選択。
変換の種類はUse 2to3 を選択。
修正の必要がある時は 線が引かれ
変更内容は緑色で表示されます。
Apply を押すと 変更されます。

 


 おさらい: ptinstaller.py の入手と bin フォルダーの作成方法。
入手方法:以下のスクリプトを記述し 実行して ptinstaller.py を DL する。
:
import requests as r
o=open(‘ptinstaller.py’,’w’)
o.write(r.get(‘https://raw.githubusercontent.com/ywangd/pythonista-tools-installer/master/ptinstaller.py’).text)
o.close()
:
bin フォルダーの作成方法:
ptinstaller.py を実行すると Fun から Utilitys のメニューがでます。
全てか Github Tools をインストールすると bin フォルダー ができます。
その bin フォルダの中に github_download.py スクリプトがあります。


 感想:
1. スクリプトを作り始めると ネットからのファイルのダウンロードが
_  意外と不便です。  ダウンロードする方法は いろいろありますが
_  スクリプトで ダウンロードする方法 が 既にありました。
_  Pythonista 3上で全てが出来ない為と 忘れる事もあり備忘録としました。
_  そして スクリプトが多くなるとフォルダーの整理が必要になってきます。
2. 課題:Pythonista 3 に組み込まれていない Module のインストール方法が
_     不明。例として matplotlib で使用してみたい Module があります。


 

Written by macsbug

8月 14, 2016 at 2:17 pm

カテゴリー: Apple, Pythonista

Pythonista Beginner : Part 1

leave a comment »

Pythonista 3 ことはじめ。「ファイルの取り扱い方法」        2016.08.02

iOSデバイス上で動作する統合開発環境の Pythonista 3 の 初心者備忘録。


.
Pythonista 3 の利点:
例えば 日本語の音声発音がたったの1行で可能ですし グラフは3行で表示が可能です。
これを Arduino や ESP8266 で行うには相当な困難があります。
画面のボタンを押したり表示する時に日本語音声で解り易く表現する事が可能な訳です。
古い話ですが「HyperCard」のような事が楽に出来る訳です。
これで 電子工作と iPad が繋がる事になります。
.

.
Apple製品の扱い難い点:
iPad は 一部をApple社が閉じた製品にしている為に 扱い難い面があります。
たとえば現在 FTP接続において読み込みはできるが書込みは出来ません。
編集する上でこれは不便です。今回はこのファイルの扱い方法をまとめました。
.
注:初回の記事の為 必要に応じて内容の追加や変更をするかも知れません。

ファイルの取り扱い方法。 結論:4. の方法をお勧めします。   追記:2016.08.03

. iPad のファイルを マック へ転送する方法。

. iPad Pythonista 3 に GitHub や Gist にあるスクリプトを取り込む方法。

. マック から iPad Pythonista 3 へ転送する方法。       改訂:2016.08.03

. iPad Pythonista3 を マックのブラウザー上で編集と転送する方法。
_                              追記:2016.08.03

5. その他、ブラウザー上のリストを使用する方法。

使用環境:
_ iPad 3 iOS 9.3.3 + Pythonista 3 ( 有料:1200円)
_ iMac 27int OSX 10.8.5  (以後 マック と表記)

. iPad のファイルを マック へ転送する方法。
_  iPadとiMacをHTTPサーバーにして iPad から マック へファイルを読む。
.
_ iPad:以下の SimpleHTTPServer を入力しサーバーを動かす。
.

import http.server
import socketserver
import webbrowser
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(('', PORT), Handler)
print ('serving at port', PORT)
httpd.serve_forever()

.
_ マック:ターミナル(Terminal)で以下を入力しサーバーを動かす。

python -m SimpleHTTPServer 8000

_ ターミナルに Serving HTTP on 0.0.0.0 port 8000 … が表示される。

.
_  マック のブラウザーで iPadのIP (例:http://192.168.100.22:8000) を入力する。
_ 例:__SmpleHTTPServer.py を入手する。
.

.
_ マック(Mac)にファイルが取れました。

.
_ そのリストの中味:きちんと取れています。


. iPad Pythonista 3 に GitHubや Gist にあるスクリプトを取り込む方法。
.
_ 例:ywangd / pythonista-tools-installer の下に「 ptinstaller.py」 があります。
_   この 「 ptinstaller.py」を iPad (Pythonista) に読み込みます。
_ 注:この方法は 多数を検証した訳では無く 読み込めない時もあります。
.

.
事前に必要なファイルのURLをメモしておく。
以下のスクリプトにファイル名とURLを記載し Pythonistaの編集画面に入力し実行する。
実行はダイレクト入力欄でも良い。(右下、> の所)
メモ:ptinstaller.py は 読み込むファイル名 で iPad の Pythonista 内に保存するファイル
_  名である。他のファイルを実行する場合は 目的の名前に変更する事。
_  注:以下は3行で書かれていますが 連続した命令です。
_  詳細:o=open(‘ptinstaller.py’,’w’)  で iPad 内にファイル名ができ
_     Pythonista Tools Installer から読み込み
_     読み込んだ ptinstaller.py を iPad へ書込み クローズします。
.

import requests as r; o=open('ptinstaller.py','w'); 
o.write(r.get('https://raw.githubusercontent.com/
ywangd/pythonista-tools-installer/master/ptinstaller.py').text); o.close()

.

.
ptinstaller.py (左) が保存されました。(右)はそのリスト。

.
ptinstaller.py:
_ Pythonista Tools Installer でスクリプトが集約された物です。
_ このサンプルを活用すればかなりな事ができると思います。
_ ptinstaller.py を実行すると以下のようなメニューが表示されます。
_ 選択して「Install」ボタンを押すとスクリプトがインストールされます。
_  binフォルダーができ 種類別のフォルダーやスクリプトが保存されます。
_ スクリプトは139個もあり これだけあれば素晴らしい開発環境になります。
_ 直ぐ動く物は少ないですが修正で動く物もありリストは参考になります。
_ bin Folderの中のPypi Modules Folder にインストールのサンプルがあります。


. マック から iPad Pythonista 3 へ転送する方法。その1
.
1. 画像1:1. と同様に iPad と マック で SimpleHTTPServer を起動します。
_   マック の IP は 192.168.100.4 とします。
_   iPad のブラウザーに 「192.168.100.4:8000」を入力すると マック(Mac)の
_   中が見えます。該当するファイルを選択し URL をコピーします。
2. 画像2:URL を iPad の スクリプトにファイル名(2行目) と
_      URL(3行目)にペーストし動かします。
3. 画像3:iPad にファイルが読み込めました。
.
画像1:iPad で 読み込むファイルのURLを取得する。

.
画像2:iPad で 読み込むファイル名とURLを設定し動かす。(赤い文字)

.
画像3:iPad Pythonista3 へ読み込まれました。


. iPad Pythonista3 を マックのブラウザー上で編集と転送する方法。
_  スクリプト WeBIDE を使用する方法。
1. 画像1:iPad Pythonista 3 の Pythonista 2 Documents フォルダーの中に
_      WebIDE-masterフォルダーがあります。この WebIDE.py を動かします。
_      iPad の IP は 192.168.100.22 とします。
_      WebIDE.py を動かすと Console に IP が示されます。
_      その IP をブラウザーに入力すると 双方が接続されます。
2. 画像2:マック のブラウザーで 192.168.100.22:8080 を入力。
_      編集画面にリスト名とリストを入力し Save ボタンを押す。
_      注:日本語文字ははSaveすると iPad 側で文字化けを起こします。
3. 画像3:iPad にファイルが読み込めました。
4. 画像4:マック のブラウザーで OPen メニューをプルダウンすると
_      iPad Pythonista3 のファイルが表示されます。ファイルを選択すると
_      スクリプトが読み込まれます。注:.py ファイルのみです。
.
画像1:WebIDE.py を動かす。

.
画像2:マックのブラウザー上で編集し Save する。
.

.
画像3:iPad Pythonista3 へ読み込まれました。

.
画像4:OPen メニューで スクリプト を読み込めます。注:.py ファイルのみです。


5. その他、ブラウザー上のリストを使用する方法。
_  ブラウザーに表示されたリストをなぞりコピーし 編集画面へ貼付ける。
_  RAW ボタンのあるリストは全体を選択してコピーする。
_  短いリストは簡単でなんとかできるが すこぶる面倒である。
_  こういう方法では通常のリストしかできない。

参考:
MygeekDaddy.net:Roll your own AirDrop with Pythonista
_ Pythonistaアプリ内のファイルをMac上に保存する。
random($foo):Pythonista and iOS Automation:幾つかの非常に厄介な制限と回避策。
how to install modules:gz, zip ファイルを iPad へ読み込む方法。
Pythonista Tools Installer:Pythonista Tools Installerのインストール方法。
ywangd / pythonista-tools-installer:Pythonista Tools Installerのインストール方法。
MyGeekDaddy.net:Roll your own AirDrop with Pythonista:SimplHTTPServerの方法。
pythonista tools:サンプルがある。

感想:
🍎 ファイルの取り扱いは Pythonista スクリプトの WebIDE.py を使用する事で解決
_   しました。いろいろ調べて試した結果で多数を試していません。
_   今後 新しい方法が見つかるかも知れません。
💻 Pythonista は 7月末からの初心者でさっぱり解りません。
💻 iPadをマックにUSB接続しても Pythonista のドキュメントエリアには繋がらず。
_  幾つかの FTP接続を試したがロックがかかり マックから iPadへは書き込めない。
_  試した事:DiskAID, iMazing, iExplorer, FTPソフト, FileTransfer 等々試す。
_  マックへの読み込みが出来たのは iMazing とFTPソフトのみ。
_  マックからの書込みはどれも出来ず。
💻 外部モジュールのインストール:pipコマンドで外部モジュールを取り込む
💻 パッケージのインストール:幾つかの方法があり出来た物もあった。
💻 課題:外部モジュールや他のファイルの取り込み方法がまだ不明。
💻 課題:2の方法でGoogle Drive に保存し ファイルやモジュールを読み込めるか。
💻 
💻 まだ 入り口ですが 画像やトーン,音声,グラフ等々が数多くの命令で簡単に作れる
_  事が解る。これには あのハイパーカード(HyperCard)以上の物を感じました。


 

Written by macsbug

8月 2, 2016 at 4:23 am

カテゴリー: Apple, Pythonista