ラベル memo の投稿を表示しています。 すべての投稿を表示
ラベル memo の投稿を表示しています。 すべての投稿を表示

Excel で "/" を入力できない問題

Excel で "/" を最初に入力しようとすると、"Alt" を押したときと同じようにメニューがアクティブになってしまう。

これは、「オプション」->「詳細設定」の最後の方にある、「Lotusとの互換性」のところにある「Microsoft Excel メニューキー(M)」が "/" になっているので、これを削除するとOKです。

mBlockへの機能拡張について

OttoロボットをmBlockでプログラミングするときの機能拡張方法をメモしておきます。

マニュアルには、「機能拡張を管理する」ダイアログで"ottodiy"を検索してダウンロードする方法が記載されていますが、OttoDIY/Hyumanoidは検索しても見つかりません。
そんな時は、OttoDIY/Hyumanoidのファイルに含まれているExtensionのzipファイルを「機能拡張を管理する」ダイアログの”拡張機能を追加する”ボタンで追加するとOKです。

IoT でホームセキュリティーシステム

IoT のお勉強に、ホームセキュリティーシステムを構築してみました。

 窓やドアに取り付けたセンサーで、窓やドアの開閉を察知し、インターネット経由で、スマホに知らせるシステムです。

使った装置は
写真で説明すると、右上の黒いのが、5V AC-DC 電源、中央の緑の基盤は 5V to 3V DC-DCコンバータ、その左が、

ESP-Wroom-02 Breakout Board
https://chum.official.ec/items/8075423


そして、左端に、センサー接続用の端子です。
すべて、手持ちの在庫で、間に合わせ、購入したのは、ケースにした、¥100ショップのA4ケースです。

今回の実際の購入金額はケースの108円だけでしたが、すべて購入したとしても、センサーを除き3000円くらいだと思います。センサーは、1か所100円くらいですが配線は大変です。

スマホとESP-Wroom-02は、IFTTT と beebotte の無償サービスを使って、双方向の通信が可能になるように作りました。

動作としては、
1.スマホからESP-Wroom-02にコマンド送出
2.ESP-Wroom-02からスマホに状態報告
です。

ご興味のある方は、涵養塾までお問い合わせください。

IFTTT
https://ifttt.com/

beebotte
https://beebotte.com/

#WSPWroom02 #ESP8266 #IoT #IFTTT #beebotte #ArduinoIDE #HA #ホームセキュリティー #MQTT #HA

Blue Tooth Serial module HC-06 設定・確認マニュアル

Blue Tooth Serial module HC-06 設定・確認マニュアル

工場出荷状態
BAUD=9600
PIN=1234

Arduinoのシリアルモニターでは"CRおよびLF""9600bps"の設定で接続します。
HC-06の電源を入れると

+READY
+PAIRABLE

とレスポンスが帰ってきたらOKです。

"AT"をおくると"OK"とレスポンスが帰ってきます。

涵養塾仕様は

DeviceName と BAUDを変更します。

"AT+NAMECHUM**"を送信すると

+NAME=CHUM01
OK

とレスポンスが帰ってきます。

"AT+BAUD8"を送ると

+BAUD=8
OK

とレスポンスが帰ってきます。

AT+HELPのリスト

Command              Description
----------------------------------------------------------------
AT                   Check if the command terminal work normally
AT+RESET             Software reboot
AT+VERSION           Get firmware, bluetooth, HCI and LMP version
AT+HELP              List all the commands
AT+NAME              Get/Set local device name
AT+PIN               Get/Set pin code for pairing
AT+BAUD              Get/Set baud rate
AT+CLEAR             Remove the remembered remote address
AT+LADDR             Get local bluetooth address
AT+DEFAULT           Restore factory default
AT+COD               Get/Set local class of device
AT+IAC               Get/Set inquiry access code
AT+ROLE              Get/Set master or slave mode
AT+STATE             Get current state
AT+UARTMODE          Get/Set uart stop bits and parity
AT+ENABLEIND         Enable/Disable Indication print
AT+LSP               List Paired Device List
AT+RESETPDL          Reset Paired Device List
AT+REMOVEPDL         Remove one entry from Paired Device List
-----------------------------------------------------------------
Note: (M) = The command support master mode only, other commands
support both master and slave mode.
For more information, please visit http://www.bolutek.cn
Copyright@2012 www.bolutek.cn. All rights reserved.

BAUDのパラメータは以下の通り、
1---1200
2---2400
3---4800
4---9600
5---19200
6---38400
7---57600
8---115200
9---230400
A---460800
B---921600
C---1382400 
default:4---9600 

AT-Commandの説明
http://diwo.bq.com/wp-content/uploads/2014/11/BLK-MD-BC04-B_AT-COMMANDS.pdf
+NAME=CHUM07

Windows10でFT232RL FTDI アダプタを使ってテスト設定するときの手順

1.FT232RL FTDI アダプタをUSBに接続し、Aduinoのシリアルモニターを起動

2.HC-06をFT232RL FTDI アダプタに接続すると

+READY

+PAIRABLE

とレスポンス

3."AT"をおくると

OK

とレスポンス

4."AT+NAMECHUM**"を送信すると

+NAME=CHUM01
OK

とレスポンス

5."AT+BAUD8"を送ると

+BAUD=8
OK

とレスポンス

6.Windows10でHC-06とペアリングする(PINは1234)

7.ペアリングできたら、デバイスマネージャでCOMポート番号を確認し、「TERA Term」等ターミナルアプリで、HC-06の割り当てられた、COMポートに接続する

+CONNECTING<<**:**:**:**:**:**
CONNECTED

とレスポンス

7.HC-06のCOMポートとFT232RL FTDI アダプタのCOMポート間で通信を確認

8.ターミナル側アプリを終了すると

+DISC:SUCCESS
+READY
+PAIRABLE

とレスポンス


*注)
Windows10では、HC-06をペアリングするとCOMポートが2つ割り当てられる。どちらが使えるか確認する必要あり??

ESP-WROOM-02 での"LIGHT_SLEEP_T"でSleepから復旧しない問題

ESP-WROOM-02 での"LIGHT_SLEEP_T"以下のSampleプログラムで、Sleepしてから、復旧しない問題が発生していた。

--------------**********こんな単純なプログラムで
extern "C" {
#include
}

void setup() {
  // ... Wi-Fi設定等

  wifi_set_sleep_type(MODEM_SLEEP_T);
}

void loop() {
}

------------**************

SleepほぼすぐにSleep状態になるが、いつまでたっても復旧しない。
購入した別のNODEMCUボードでも同じ、WeMosボードでも同じ????

ふと思い立って、ファームを最新版に書き換えてみた。

復旧しました。 チャンチャンチャーン!

「信じるな、ソフトは常に変化する」

Modela MDX-15 でPCBを作成する

Modela MDX-15 でPCBを作成する方法について

手軽に彫刻ができるマシン Modela MDX-15 です。


概要
1.Eagle CAD で回路図を作成し fablab-mill-n-drill.ulp を使って ミリングとドリルのデータを作成し、これを DXFフォーマットで出力し、Dr. engraveでそれを加工出力する

2.表示Layerを"20Dimension, 46Milling, 45Holes"の3つにして、"File"-"Export"-"DXF"で、DXFファイル出力する。 "20Dimension, 45Holes" の2つだけのDXF(穴あけ用)も作る
 Dimensionレイヤーは寸法調整用なので、サイズを確認しておく必要がある。

3.

参照
http://theoriesblog.blogspot.jp/2015/06/roland-modela-mdx-15.html
http://ailab.t.u-tokyo.ac.jp/~aoki/tutorial/pcb/

作成例 ミリングだけ

EagleCAD で作成した回路図 に fablab-mill-n-drill.ulp を使って ミリングとドリルのデータを作成


レーザーカッターで簡単にできるフェルトマスコット

おもちゃ病院の仲間が持っていた型紙付きのアンパンマン雑誌を見て、これはレーザーカッターの応用にちょうど良いと思い、早速作ってみました。


型紙をスキャナーで取り込み、ちょっと画像処理して、フェルトの色ごとに画像を分解します。

材料は、\100ショップで手に入れた、粘着タイプの「シールフェルト」です。
90x90の大きさで10色(10枚)入っていました。

レーザーカッターでカットの終わったシールフェルトを、貼り重ねるだけで、簡単に出来上がるので、小さい子供たちにはちょうど良いですね。

ご覧の通りの出来栄えです。(色の選び方は、私のセンスがいまいちですが・・・)



涵養塾のレーザーカッターは、半分自作で、10Wの半導体レーザーを使用しており、レーザー彫刻はもちろん、3mm程度のMDF木材、アクリル板(黒)などの切断まで可能です。

どうぞ、お試しください。


チャレンジしてみたい方、お気軽にご連絡ください。
お問い合わせ

スクラッチでも動かせるIoTおもちゃコントローラ "ESP-Toy"

スクラッチでも動かせるIoTおもちゃコントローラ "ESP-Toy"  はESP-WROOM02 WiFiモジュールをベースにカラーLEDとモータードライバーを搭載した汎用コントローラモジュールです

おもちゃを意識して、色もカラフルに5色そろえました。

用途
  • ArduinoIDEで簡単に開発できるIoTモジュール
  • 各種センサーを使ったリモートセンシング
  • スクラッチのプログラム勉強用フィジカルブロック
  • あなたのおもちゃをワイヤレスコントロールおもちゃに改造
  • LEGOブロックとの組み合わせでお安いロボット
  • スクラッチですぐに使えるWi-Fi AP 機能付きのファームもあります
できること

  • フルカラーLED(基板には1個、外付け(オプション)すれば)何個でも使える
  • モーターを2個まで動かせる
  • サーボモーターを同時に3個まで動かせる(オプション)
  • いろんなセンサーを付けることができる(I2Cオプション)
  • WiFiのアクセスポイントにもなる
  • スクラッチ(PYONKEE)からWiFi(無線で)コントロールできる
  • Arduino-IDEでプログラムできる
  • LUAやMicroPythonを使うこともできる(ファームの書き換えによる)


製作例







ESP-Toy_kit Green

ESP-Toy_kit Red

ESP-Toy_kit Yellow

ESP-Toy_kit Blue

ESP-Toy_kit Black

価格 ¥1,500.-(税込み 送料別)オンラインショップ
(組み立て済みは¥2,500.-)オンラインショップ



涵養塾のオリジナル商品や、取扱部品の価格や在庫状況は、涵養塾の在庫票をご参照下さい。

電子工作キット ESP-Toy_kit は 「涵養塾オリジナル」の「電子工作キット」



Appendix1.ESP-WROOM-02 参考URL ここを一番参考にしました
  http://qiita.com/tags/ESP-WROOM-02


チャレンジしてみたい方、お気軽にご連絡ください。
お問い合わせ




Appendix2. ESP-Toy Schematics


2.4" 240x320 color LCD と Arduino nano で、小さなターミナルを自作してみました。

2.4" 240x320 color LCD と Arduino nano で、小さなターミナルを自作してみました。
写真中央のArduino-NANOをコントローラとして、手前の黒いコネクタはマイコン用のUART、左上は電源コネクタ、右上はキーボード用のPS2コネクタ、その他はArguino互換のピン配置で、LCDモジュール用のコネクタだ。

実験なので、Arduino互換ピン配置のユニバーサルボードを使って、ラッピングで配線をした。

 液晶モジュールを載せたところ。

 キーボードと電源をつないで、ハイこの通り。
 画面の向き、文字の大きさ・色、UARTの通信速度等が設定できるように作ってみた。

チャレンジしてみたい方、お気軽にご連絡ください。

お問い合わせ






参考までに、Arduino-NANOのCodeです。
是非、コメントをお寄せください。

/* By T.Kasahara May-26 '17 CHUM_Terminal Ver1.0
 *PS2Keyboard Japanese Keyboard Layout  
  Color TFTLCD Adafruit library 
  PS2 Key board
  Charactor Terminal
F1 :Help
F5 :Save Setting
F6 :Local Echo
F7 :Board Rate
F8 :Reverse Color
F9 :Back color
F10:Font color
F11:Rotation
F12:Font Size

-ESC- for Exit from Settings
 
*/

//#define DEBUG //Debug mode

#ifdef DEBUG
 #define DEBUG_PRINTLN(x)  Serial.println (x)
 #define DEBUG_PRINT(x)  Serial.print (x)
 #define DEBUG_FPRINT(x,y)  Serial.print (x,y)
#else
 #define DEBUG_PRINTLN(x)
 #define DEBUG_PRINT(x)
 #define DEBUG_FPRINT(x,y)
#endif

#include    // Core graphics library
#include // Hardware-specific library
#include

#define YP A1  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 7   // can be a digital pin
#define XP 6   // can be a digital pin

#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0

CHUM_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD);

#define T_Wrap HIGH //Text Wrap around ON:HIGH,OFF:LOW
#define blink_speed 1000
#define D_Width 240 //Display Width size Pixel
#define D_Hight 320 //Display Hight size Pixel
#define Wait_setup 2000

// Assign human-readable names to some common 16-bit color values:
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

#include
#define EE_boardrate 1023
#define EE_F_color 1022
#define EE_B_color 1021
#define EE_rotation 1020
#define EE_C_Size 1019
#define EE_Echo 1018

#include //code modified for Japanese Key board
const int DataPin = 18;
const int IRQpin =  2;
PS2Keyboard keyboard;

int color[]={BLACK,BLUE,RED,GREEN,CYAN,MAGENTA,YELLOW,WHITE};
int C_Size = 2; //Charactor Mag.
#define C_Max 4
long rate[]={9600,19200,38400,57600,74880,115200,230400,250000};
int boardrate = 0;
int rotation = 0; //Display rotation 0&2:H,1&3:V
int F_color = 0;
int B_color = 0;
int echo = 0;

int End_Line ;
int C_Line = 0;
boolean toggle = 0;
int ii,jj;
char cc;
uint8_t c;
int count;
unsigned long c_time;

void setup() {
// Restore settings
  boardrate = EEPROM.read(EE_boardrate);
  F_color = EEPROM.read(EE_F_color);
  B_color = EEPROM.read(EE_B_color);
  rotation = EEPROM.read(EE_rotation);
  C_Size = EEPROM.read(EE_C_Size);
  if(C_Size == 0) C_Size = 1;
  echo = EEPROM.read(EE_Echo);

//Keyboard Serial Begin
  keyboard.begin(DataPin, IRQpin, PS2Keymap_Japanese);
  Serial.begin(rate[boardrate]);
  DEBUG_PRINTLN(F("CHUM_Terminal V0.1"));

// TFTLCD Initialize
  tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);

  refresh(); //Refresh display
  tft.print(F("F1 for Setting"));
  refresh(); //Refresh display
  tft.print(F("F1 for Setting"));

// Setting
  if (keyboard.available()) {
    c = cc = keyboard.read();
    DEBUG_FPRINT(c,HEX);
    DEBUG_PRINT(" ");

    if(c == 0xc2){
      while(c != 0x1B) { // Wait ESC
        switch(c){
          case 0x81:  // F1 Help
            tft.fillScreen(color[B_color]); // Screen clear
            tft.setTextWrap(T_Wrap); //Set Text Wrap around
            tft.setCursor(0,0);
            DEBUG_PRINTLN(F("F1 :Help"));
            tft.println(F("F1 :Help"));
            tft.println(F("F5 :Save EEPROM"));
            tft.println(F("F6 :Local Echo"));
            tft.println(F("F7 :Board Rate"));
            tft.println(F("F8 :Reverse Color"));
            tft.println(F("F9 :Back color"));
            tft.println(F("F10:Font color"));
            tft.println(F("F11:Rotation"));
            tft.println(F("F12:Font Size"));
            tft.println();
            tft.println(F("-ESC- for Exit from Help"));
          break;

          case 0x85:  // F5 Save Settings to EEPROM
            F5_Set_EEPROM();
          break;
     
          case 0x86:  // F6 Local Echo On/Off
            F6_sw_echo();
          break;

          case 0x87:  // F7 BoardRte
            F7_BoardRate();
          break;
     
          case 0x88:  // F8 Reverse color
            jj = B_color;
            B_color = F_color;
            F_color = jj;
            refresh();        
          break;
     
          case 0x89:  // F9 Back ground color KCMYGBR
            B_color += 1;
            if( B_color >7) B_color =0;
            refresh();
          break;
     
          case 0x8A:  // F10 Font Color WRGBMYC
            F_color -= 1;
            if( F_color < 0) F_color =7;
            refresh();
          break;
     
          case 0x8B:  // F11 Rotation 0,1,2,3
            rotation +=1;
            if(rotation > 3) rotation=0;
            refresh();
          break;
     
          case 0x8C:  // F12 Zoom 1,2,3,4
            C_Size +=1;
            if(C_Size > C_Max) C_Size=1;
            refresh();
          break;
             
          default:
            ;
          break;

        }
        while (!keyboard.available()) ;
        cc = keyboard.read();
        c = cc;
        DEBUG_FPRINT(c,HEX);
        DEBUG_PRINT(" ");
      }
      refresh();
    }
  }
  refresh();
  c_time = millis();
}

//************************************************//
void loop() {
    C_Line = tft.getCursorY();

// Keyboard
    if (keyboard.available()) {
      off_Cursor();
      c = cc = keyboard.read();
      DEBUG_FPRINT(c,HEX);
      DEBUG_PRINT(" ");

      switch(c){
        case 0x0d:  //CR
          if ( echo != 0) New_Line();
          Serial.println();
        break;

        case 0x0a:  //LF
          if ( echo != 0) New_Line();
          Serial.println();
        break;

        case 0x08:  //Back Space or Left arrow
          if ( echo != 0) Back_Space(1);
          Serial.print(cc);
        break;

        case 0x7F:  //Delete
          if ( echo != 0) Delete_Space();
          Serial.print(cc);
        break;
     
        case 0x8d:  // Up
          Serial.write(0x1b);Serial.write(0x5b);
          Serial.write(0x41);
        break;

        case 0x8e:  // Down
          Serial.write(0x1b);Serial.write(0x5b);
          Serial.write(0x42);
        break;

        case 0x8f:  // Right
          Serial.write(0x1b);Serial.write(0x5b);
          Serial.write(0x43);
        break;

        case 0x90:  // Left
          Serial.write(0x1b);Serial.write(0x5b);
          Serial.write(0x44);
        break;

        default:
          if ( echo != 0){
            tft.print(cc);
            New_Line();
          }
          Serial.write(c);
        break;
      }
    }

//Serial
    if(Serial.available()){
      off_Cursor();
      c = cc = Serial.read();

      switch(c){
        case 0x0d:  //CR
          tft.setCursor( 0, tft.getCursorY());
//          New_Line();
        break;

        case 0x0a:  //LF
          tft.println();
          New_Line();
        break;

        case 0x08:  //Back Space
          Back_Space(1);
        break;
     
        case 0x7F:  //Delete
          Delete_Space();
        break;

        case 0x1b:  //ESC Sequence
          while(!Serial.available());
          c = cc = Serial.read();
          if(c != 0x5b ) break;
          count = 0;
          do{
            while(!Serial.available());
            c = cc = Serial.read();
            if( c == 0x4b ){  //delete line
              Clear_line(tft.getCursorX(),tft.getCursorY());
              break;
            }else if(c == 0x44){ //Number
              if(count == 0) count = 1;
              Back_Space(count);
              break;
            }else if( (c >= 0x30) && (c <= 0x39)){ //Number
              count = count*10 + (c -0x30);
            }else {
              break;
            }
          }while(1);
        break;

        default:
          tft.print(cc);
          New_Line();
        break;
      }
    }
  if ( (millis()-c_time) > blink_speed ){
    if(toggle){
      tft.setTextColor(color[F_color]);
      tft.print("_");
    }else{
      tft.setTextColor(color[B_color]);
      tft.print("_");
    }
    Back_Space(1);
    tft.setTextColor(color[F_color],color[B_color]);
    toggle = !toggle;
    c_time = millis();
  }
}

void off_Cursor(){
  tft.setTextColor(color[B_color]);
  tft.print("_");
  Back_Space(1);
  tft.setTextColor(color[F_color],color[B_color]);
}

void Delete_Space(){
      tft.print(" ");
      jj = tft.getCursorX() - 12 * C_Size;
      if( jj < 0) jj=0;
      tft.setCursor( jj, tft.getCursorY());
}

void Back_Space(int pp){
      jj = tft.getCursorX() - 6 * C_Size * pp;
      if( jj < 0) jj=0;
      tft.setCursor( jj, tft.getCursorY());
}

void  New_Line(){
      jj = tft.getCursorY();
      if( C_Line < jj ){
        if(jj >= End_Line){
          tft.setCursor(0, 0);
          jj = 0;
        }
//        DEBUG_PRINT(" Y=");
//        DEBUG_PRINTLN(jj);
        C_Line = jj;
        Clear_line(tft.getCursorX(),jj);
      }
}

void Clear_line(int xx, int yy){
        tft.setTextWrap(LOW);
        tft.print(F("                                                       "));
        tft.setCursor(xx,yy);
        tft.setTextWrap(T_Wrap);
}

void  F6_sw_echo(){
          tft.fillScreen(color[B_color]); // Screen clear
          tft.setCursor(0,0);
          DEBUG_PRINTLN(F("F6 :Local Echo ON/Off"));
          if( echo == 0) {
            tft.println(F("Local Echo OFF"));
          }else{
            tft.println(F("Local Echo ON "));
          }
          tft.println();
          tft.println(F("ESC->Exit"));
          while(c != 0x1B) { // Wait ESC
            while(!keyboard.available()) ; // wait key
            c = keyboard.read();
            tft.setCursor(0,0);
            tft.println();
            if(keyboard.available()) c = keyboard.read();
            if(c != 0x1B) echo ^= 0x0001 ;
            if( echo == 0) {
              tft.println(F("Local Echo OFF"));
            }else{
              tft.println(F("Local Echo ON "));
            }
          }
          refresh();
}

void  F7_BoardRate(){
          tft.fillScreen(color[B_color]); // Screen clear
          tft.setCursor(0,0);
          DEBUG_PRINTLN(F("F2 :BoardRate"));
          Serial.end();
          tft.println("        ");
          tft.println("bps");
          tft.println();
          tft.println(F("ESC->Exit"));
          while(c != 0x1B) { // Wait ESC
            tft.setCursor(0,0);
            tft.print(rate[boardrate]);
            tft.println("      ");
            while(!keyboard.available()) ; // wait key
            c = keyboard.read();
            if(keyboard.available()) c = keyboard.read();
            if(c != 0x1B) boardrate += 1;
            if(boardrate > 7) boardrate = 0;
          }
          Serial.begin(rate[boardrate]);
          refresh();
}

void   F5_Set_EEPROM(){
          EEPROM.write(EE_boardrate,boardrate);
          EEPROM.write(EE_F_color,F_color);
          EEPROM.write(EE_B_color,B_color);
          EEPROM.write(EE_rotation,rotation);
          EEPROM.write(EE_C_Size,C_Size);
          refresh();
}

void F1_Help(){
          tft.fillScreen(color[B_color]); // Screen clear
          tft.setTextWrap(T_Wrap); //Set Text Wrap around
          tft.setCursor(0,0);
          DEBUG_PRINTLN(F("F1 :Help"));
       
          tft.println(F("F1 :Help"));
          tft.println(F("F5 :Save EEPROM"));
          tft.println(F("F7 :Board Rate"));
          tft.println(F("F8 :Reverse Color"));
          tft.println(F("F9 :Back color"));
          tft.println(F("F10:Font color"));
          tft.println(F("F11:Rotation"));
          tft.println(F("F12:Font Size"));
          tft.println();
          tft.println(F("-ESC- for Exit from Help"));
          while(c != 0x1B) { // Wait ESC
            c = keyboard.read();
            delay(200);
          }
          refresh();
}

void refresh(){
  tft.fillScreen(color[B_color]); // Screen clear
  tft.setTextWrap(T_Wrap); //Set Text Wrap around
  tft.setRotation(rotation);
  tft.setCursor(0,0);
  tft.setTextColor(color[F_color],color[B_color]);  tft.setTextSize(C_Size);
  tft.println(F("CHUM_Terminal V0.1"));
  if(rotation == 0 || rotation == 2 ){
    End_Line = D_Hight;
  }else{
    End_Line = D_Width;
  }
}

Micro Python & 自作ターミナル

手持ちの ”Cortex-M4"マイクロコントローラボード "NUCLEO-F401RE" の使い道を考えていたところ、"MicroPython" を見つけたので、試してみた。

 CQ出版の インターフェース2016年10月号(PDFで購入)で"Python" の特集があり、そこに、詳しい説明(第7章アプリはスクリプトで柔軟に!マイコン用MicroPythonプログラミング)があったので参考にした。

左のLCDは、320x240の自作ターミナルです。

映像は、ターミナルをリセットしたのち、NUCLEO-F401REをリセットするとMicroPythonが起動し、キーボードから”1+2”と入力すると、答えが表示されている様子がわかります。

"MicroPython"には、esp8266、esp32用のコードも用意されていますので、ターミナルさえ準備できれば、手軽に学習ができると思い、このターミナルを作ってみました。

てがるに、Pythonを勉強するには、持ってこいではないですか?

チャレンジしてみたい方、お気軽にご連絡ください。

お問い合わせ

MAX10 FPGA電子工作キットが、動くまで

トランジスタ技術増刊号の「FPGA電子工作スーパーキット」を使って、FPGAの勉強環境を用意しました。

 実際にこのFPGA勉強環境が動くまでの苦労メモです。

 付録の、FPGA基板(MAX10-FB)とPICを使ったUSB Blaster機能基板(MAX10-JB)、同じく付録のDVDに収められた開発環境のインストールをしました。

1.まず、基板を作成し、PICにUSB Blaster機能を持たせるためのファームの書き込みです。
 説明通り進めればそれでよかったようですが、MAX10-JBのPIC書き込みの際、注意書きにあるようにUSB電源の信号ラインがアクティブになるものに接続すると書き込みエラーになる。

 実際は、このアクティブにならないということの確認が、実際にケーブル接続後信号を確認しないとわからなかったため、大丈夫と思ったものがほとんどだめで、何度も失敗した。

 結局、USB電源をやめ、3.3Vの外部電源を基板に直接接続することで、成功した。

参考URL:トラブルシュート- MAX10 FPGA解説本


2.できたと思って、開発環境をインストールしてMAX10-JBをUSBケーブルで接続したが、ドライバーが正常にインストールされませんでした。

 PICの書き込みがうまくいかなかったのかと思い、何度も見直したが、結局書き込みは正常に成功したようだったので、ドライバーのインストールがうまくいかない問題の調査を始めた。

 USB Blasterのドライバーはちゃんとした署名がないから、Windows10では通常モードではインストールしてくれないということが分かった。

 で、調べた結果以下のURLを参考にドライバーのインストールをし直したところ、ようやく、インストールが成功し、開発環境で、MAX10-FBが認識できるようになった。

参考URL:MAX10 USB-Blasterが認識されない
参考URL:Windows 10のテストモードで署名のないドライバをインストールする方法

チャレンジしてみたい方、お気軽にご連絡ください。


iPAD PYONKEE での MESH 接続について

PYONKEE は iPadで動く本格派のビジュアルプログラミング環境です。MITメディアラボの SCRATCH1.4 を基にしておりプロジェクトの互換性があります。

これを使って、SCRATCH1.4と同じように MESH 接続を使い ロボットコントロールをしてみようと思い、チャレンジしました。

PYONKEE のメニューには最初から「メッシュのホストになる」というのがあり、これをタップすると IPアドレスが表示され うまいことホストになったように見えたが、つながらなかった


いろいろと調べた結果、「調べる」の「センサーの値」ブロックを長押しして、現れた「遠隔センサー接続を有効にするこれで、ホストになれました。 この時点では IPアドレスが表示されないので、改めてメニューから「IPアドレスを表示する」で、確認します。

これで、うまいこと行きました。

どちらも同じはずとの指摘を受けて、調べたところロボット側の電圧低下による不安定動作だったようだ。
ご指摘の通り、どちらでも動作しました。
ご指摘ありがとうございます。

確認したのは、PYNKEE Ver2.2 bild 3 です。

TeraTerm4.93 にバグ??

ESP-Wroom02のシリアルモニター用にTeraTerm4.93を使用したところ、文字化けが発生。
いろいろと設定を確認したが治らず、古いバージョン4.89に変更したところ治った。

Windows7~10 Soft AP の設定


Windows7~10 Soft AP の設定方法は同じで、以下のURLを参考にして実行できます。

http://tabletpcnavi.com/windows10-softap/


EAGLEライブラリーをDS-PCBに取り込む手順メモ

EAGLEライブラリーをDS-PCBに取り込む手順メモ
DS-PCB : (DesignSpark PCB)

1.EAGLE - >ライブラリーをOpen

2.DS-PCBのインストールフォルダーの中の"EagleULP"フォルダーの中にある"LibraryToIntermediate.ulp"をULPで実行する。
 変換された中間ファイルは"***.eil"で、適当なフォルダーに保存する。

3.DS-PCBを起動し、"File"->"Library"でLibrary Managerを起動します。

4."Schematics Symbols"タブをクリックします。

5."NewLibrary"ボタンをクリックし、新しく作るライブラリの名前を入力します。(EAGLEライブラリの名前と同じにできれば便利です。

6."Add Files"ボタンをクリックし、先ほど保存した中間ファイル"***.eil"を選んで"開く"ボタンをクリックします。

7."PCB Symbols"タブをクリックし、上記5.6.を繰り返します。

8."Components"タブをクリックし、上記5.6.を繰り返します。

以上で、完了です。

Raspberry Pi Original Touch screen LCD Configration



○ 画面の上下を逆にする。
(タッチスクリーンも同時に逆になった。)

Rotating the screen
If you're using our stand, you'll have to rotate the screen. We've orientated it so that the Pi power, AV and HDMI ports are facing upwards, to keep the sleek low profile look, and the GPIO is at the bottom so you can wrap a ribbon cable underneath for easy access to GPIO via Black HAT Hack3r.

You can rotate the LCD by editing /boot/config.txt and adding the line: lcd_rotate=2 to the top.

You can do this by booting up your Pi, going into the Raspberry menu, picking "Accessories" and then "Terminal".

In Terminal, type "sudo nano /boot/config.txt"
Add the line "lcd_rotate=2" to the top of the file.
Press CTRL+X
Then Y
Then Enter.
And reboot!

MP3プレイヤー DFPlayer mini 覚書

MP3プレイヤー DFPlayer mini を使うための参考URL

DFPlayer Mini SKU:DFR0299 - Robot Wiki - DFRobot








ユニバーサルスイッチと組み合わせて、おしゃべりリモコンにしてみました。


CHUM-ESPW02BB(esp8266) でLUAを動かす!

東芝のFlashAirにLUA機能があるということで、試してみようとしましたが、LUAが使えるのは、Ver3以上、私が持っているFlashAirはVer2でだめでした。

 そこで、CHUM-ESPW02BB(esp8266)では、どうかというと、これができます。

 以下、やってみたことと、注意点をまとめました。

使用環境
CHUM-ESPW02BB(esp8266)
・UBS-Serial ft232
実験用ATXPower

※概要

LUA:とはこれです  Script言語のひとつですね。
LUA LOGO

LUACHUM-ESPW02BB(esp8266)で使うには、NodeMCUと言うファームウェアが使えます。
NodeMCU LOGO

NodeMCUとはこれです 最近の中国ではいろんなものが出来ています。(気が付けば、ハードはもちろんソフトもツールもすべて中国製? 日本ガンバ!)


NodeMCUのインストール

関連データはGitHubにあります。 最新版のファームウェアはこちらのページから

2016年4月5日現在は、
nodemcu_float_0.9.6-dev_20150704.bin
nodemcu_integer_0.9.6-dev_20150704.bin
この2つですが、今回はさほど容量が違わないような気もするので、とりあえずfloat版を選んでみます。

これを、適当なフォルダにダウンロードしておきます。

次に、CHUM-ESPW02BB(esp8266)に書き込むわけですが、専用のツールがあります。
NodeMCU flasherです。Githubからダウンロードし、”ESP8266Flasher.exe”を実行します。
(Win64とWin32を選ぶ必要があります。)


NodeMCU flasherの設定
 ・COM Port を CHUM-ESPW02BB(esp8266) と接続したCOMPortに設定します。(ここではCOM10でした)
 ・Config タブに移って、先ほどダウンロードしたファームのファイルパスを設定します。
  赤丸のギアマークのようなアイコンをクリックするとファイルが選べます。 ファイルを選択すると赤四角のところに、入力されます。

 ・ここで、重要な確認 CHUM-ESPW02BB(esp8266) のジャンパを
Down Load Mode にします。

 ・いよいよ、Flash(F) をクリックします。 書き込んでいる最中は、下記のような表示になりました。


 ・終わったら、再度重要な確認 CHUM-ESPW02BB(esp8266) のジャンパを
Flash Boot Mode にします。


ESP8266 Lua Loader のインストール

 ・これで、シリアル端末を接続すればLUAが使えるようになりましたが、ここでも、使い勝手のよいツールが用意されています。
ESP8266 Lua Loaderです。 私は、このページからVer0.91をインストールしました。

このツールを使うと、何かと便利ですね。