2020年3月29日日曜日

Softbank Air ターミナル3+をただのAPとして使う。

友人がソフトバンクエアー解約してこの使えない装置なんとかできないかと悩んでいたので借りてきた。ソフトバンクエアー、噂通り結構ひどい回線らしい。
LTEモデムが入っているので改造して他のSIMで使えたらいいなーと思ったんだけど79aに関してはファームウェアすら入手できなさそう。

というわけでお手軽にAPにできないかやってみた。

設定画面はシンプルすぎてほぼ設定するところがない。DHCPも止めるような項目がない…
DHCP止めないとAPとしては使えないしなぁ

いろいろ試してみた結果、ネットワークの設定のIPアドレス/DHCPサーバの設定で
本機器IPアドレスと、割当アドレスの範囲の開始IPと終了IPの3つのIPを一緒にするとIPが割り当てられない事が判明。今回は試しに192.168.11.100に設定。
そもそも同じ値を入れても保存できないんじゃないかと思いこんでいた…
入れてみたら普通に保存できるじゃん!

保存して単体で適当なWiFiデバイスを繋いでみるとIPアドレスが取得できなくて自動プライベートアドレスになった。これでルーターに接続しても大丈夫そうなことがわかった。

こうなると自動プライベートアドレスで接続できたほうが便利そうなので本機器IPアドレスを169.254.255.1に設定してみた。これならDHCPでIPが取得できなくても自動プライベートアドレスの状態でhttp://169.254.255.1にアクセスすればSoftbank Airの設定画面が開けるはず。しかしサブネットマスクを255.255.0.0にできなかったので、Chromeのデバッグ機能(F12)を使用してdisabled="disabled"の部分を消してみた。すると255.255.0.0に設定できるようになった。(ちゃんと保存を押しても保存されてる)

これなら設定したいときはルーターに接続せずに単体で起動してWiFiに繋げば自動プライベートアドレスで設定画面にいつでも行けるかも。という汎用性がある設定に。ただしルーターに繋いだ状態だとアクセスできないけど…
そこは環境に合わせてという。

ちなみにWiFiで一応64台まで繋げられるっぽい。

というわけでめでたくNTTのPR-400NEにこいつを接続してただの光回線のWiFiアクセスポイントとして活躍できることとなったらしい。ルーター機能としてはNTTの純正結構最強だし、無駄なWiFiオプションプランとか入らなくていいし良かったみたいだな。

11acの2ストリーム対応なのでルーター機能いらないなら中古でも投げ売りされてるのでお得かも。ちなみに11ac対応デバイスで実測で450Mbpsぐらい出ていた。(有線だと600Mbpsぐらいの回線で)

2020年3月17日火曜日

AX88179搭載の安価なUSB3.0 LANアダプタを買ってみた

ラズパイ用にUSBのLANアダプタを探していたらUSB3.0対応版が安かったのでついポチってしまった。
USB2.0対応のでも問題なかったんだけどね…

というわけでASIX AX88179搭載のLANアダプタが500円以下で購入できた。

KEIBUっていうところのLANアダプタ、Aliexpressで4.13ドルだった。
一見Plugableの旧型のLANアダプタ(Wii対応のやつ)にも見えたんだけどね…

多分デザインはPlugableのUSB2.0のやつのパクリかな?GLAABITってなんだよっていう…

でも一応USBはちゃんと3.0っぽいのがついてる。


裏面は何も書いてない。

こういう怪しいデバイスは分解したくなる。AX88179搭載のLANアダプタとかAmazonでもこれの二倍以上の値段するし…
というわけで早速分解。

樹脂のハウジングは接着もされてなかったのでかんたんに分解できた。
一応AX88179って書いてあるチップが乗ってる。USB2.0対応のASIXチップはCOB実装のを見たことがあるけどこいつはちゃんとICが乗ってる。本物なのかな?

裏面はこんな感じ。MACアドレスEEPROMが載ってる。
表面はコモンモードチョークコイル系の部品をガッツリとガーバー編集で省いてしまった感が出ているけど…
LEDのパットとかもあるけど部品は乗ってない感じ。まぁLAN端子側にアクセスLED等がついてるから問題ないのだろうけども。
USB3.0 LEDってのが気になってパターンたどってみたら一応Super-Speedのときに光るような端子につながっているみたい。
実装すれば光るのかもしれない。


一応PCでもちゃんとAX88179として認識するし、ASIXの最新ドライバもちゃんとインストールできた。MACアドレスのベンダーIDはMotorola Koreaらしいけど。怪しい…
インターネットスピードテストしてもいつもどおり600Mbps超えてるから一応ギガビット出てそう。ローカルでは測定してないけど。

Auto-MDIX対応じゃない適当なLANアダプタとストレートケーブルで繋いでみたらちゃんと接続できたのでAuto-MDIX機能が付いてるみたい。

一応ASIXチップ搭載ということでNintendo Switchに接続してみたらちゃんと認識して有線LANでネットに繋ぐことができた。ギガビットでUSB3.0な任天堂スイッチ対応LANアダプタとして最安値なんじゃないかな?むしろギガビットじゃないやつより安いし…

2020年3月7日土曜日

Attiny 412で赤外線リモコンを受信してみた

 Attiny412でNECフォーマットな赤外線リモコンを使ってみた。このマイコン小さいのにペリフェラルめっちゃついてるし面白い…

とりあえずArduinoのmegaTinyCoreを使ってjtag2updiな書き込み機で試してみた。UPDIは電源とグラウンドとUPDIのピンだけで書き込めるのですごく便利だ。

IRremoteライブラリはtinyAVR1に対応していなかったので、簡易的にメインループ内で実行できるような状態で確認してみた。

#define ir 2

void setup() {
  pinMode(ir, INPUT);
  Serial.begin(115200);
  Serial.println("megaTinyCore IR reciever");
}

void loop() {
  unsigned long int sb, lt, ht;

  while(digitalRead(ir) == HIGH){;}
  sb = micros();
  while(digitalRead(ir) == LOW){;}
  lt = micros() - sb;

  if(lt > 9000){
    sb = micros();
    while(digitalRead(ir) == HIGH){;}
    ht = micros() - sb;
    if(ht > 4500){
      ir_decode();
    } else if(ht > 2100){
      Serial.println("---Repeat Code---");
    }
  }
}

void ir_decode(){
  int i;
  unsigned int custom;
  uint8_t data,data_inv;
  unsigned long int sb, len;

  i=0;
  while(1){
    sb = micros();
    while(digitalRead(ir) == LOW){;}
    while(digitalRead(ir) == HIGH){;}
    len = micros() - sb;

    if(i < 16){
       if(len > 2000){
         custom = custom << 1 | 1;
       } else {
         custom = custom << 1 | 0;
       }
    }else if(i < 24){
       if(len > 2000){
         data = data << 1 | 1;
       } else {
         data = data << 1 | 0;
       }
    }else if(i < 32){
       if(len > 2000){
         data_inv = data_inv << 1 | 1;
       } else {
         data_inv = data_inv << 1 | 0;
       }
    }
    i++;
    if(i >= 32){
      break;
    }
  }
  if(data == uint8_t(~data_inv)){
    Serial.print("Custom Code:0x");
    Serial.println(custom,HEX);
    //Serial.println(data,BIN);
    Serial.print("Data Code:0x");
    Serial.println(data,HEX);
    //Serial.println(data,BIN);
  }
}


これで一応受信できてるっぽい。サンプルなのでシリアルポートで出力してるけど簡易的な用途だったらAttiny202でも行けるかもしれない。ちなみにこの状態で2237バイト。
シリアルなかったら202に収まるかも?

2020年2月23日日曜日

SSD1309な1.54インチOLEDをI2C接続に改造してみた。

SPI接続の1.54インチOLEDモジュールをI2C接続に改造してみた。
前回テスターで確認してみた感じだとSSD1309自体はI2Cにも対応してるんだけど、基板上でSPIモードに固定されてそうだったので基板を改造したI2Cに対応させてみた。

一応SSD1309な1.54インチのOLEDモジュールも何種類かあってSPIとI2Cが切り替えられるようなモジュールも存在しているのでI2C対応はできるはず!ということで調べてみると24PinのOLEDモジュールの仕様書的なものがあったのでその通りに配線してみた。

しかしBS1(LCD側の6番ピン)がどうやらコネクタの下でGNDに直結されてそうなのでOLEDモジュール自体を剥がして基板だけにしてみた。
OLEDディスプレイ自体は両面テープで固定されていたけど隙間からアルコールを数滴垂らして薄いコーキングヘラでゴシゴシしていたら剥がれた。糸とかのほうがいいかも。
OLEDディスプレイ自体は割れやすそうなので注意かも。
v1.54" OLED Ver1.0
やっぱり表面には出ていなかったので、コネクタを剥がしてみた。予想通りコネクタの下で6番Pin(写真だと右から6番目)がGNDにつながっていた。
とりあえず6番Pinがコネクタの下で6Pinに接続されているのをパターンカットしてコネクタを戻した。6番Pinのパターンカットが失敗しているとI2Cの改造で3.3VとGNDがショートしてしまうのでちゃんとテスターチェック。
そんでもって5番PinがVDDなのでコネクタを取り付けたあとに5番Pinとショートさせた。さらにI2Cの場合はSDAとしてPin14とPin15を使用するので14がSDAにつながっていたので14と15をハンダでショートさせて使用した。
あとはI2CタイプのSSD1306モジュールのようにパワーオンリセット回路を追加した。手持ちの部品で1uFと2.2kΩで試してみたんだけど不安定だったので、1uFと10kΩの簡易CRリセット回路にしてみた。面実装のダイオードが手持ちでなかったのでダイオードはつけてない。ダイオードを付ける場合はカソード側をVCCで抵抗と並列につなぐ。
でもとりあえずこれで電源とI2Cの2本、計4本でマイコンに接続できる。
SPIだと画面を高速で切り替えられていいんだろうけど、あんまりスピードが必要ない用途にはやっぱりピン数が少なくて良いI2Cが便利かも。

ちなみにソフトウェアの方は基本的にはSSD1306とSSD1309は同じコマンドに対応しているので互換性があるっぽい。リセットの回路はSSD1306と同じ定数ではうまくリセットできないことが多かったので違いはそのへんかな?

SSD1306のライブラリでそのまま動かすことができた。u8g2では
U8G2_SSD1309_128X64_NONAME0_F_HW_I2C u8g2(U8G2_R0);
という設定も用意されているけどSSD1306のままでも行けた。

SSD1306搭載の0.96インチOLEDモジュールの置き換えとしてはSH1106搭載の1.3インチよりもこのSSD1309搭載の1.54インチのほうがソフトがそのまま使えて便利かも。画面も大きいし。


2020年2月22日土曜日

SSD1309な1.54インチOLEDモジュールを使ってみた。

この前SSD7789なIPS LCDを試してみたけど、やっぱりOLEDのほうが今までのソフトを流用できたりして便利なので1.54インチのOLEDディスプレイをポチってみた。
これもSPI接続。700円ぐらいだった。

NFP0301-04A
形状は0.96インチとか1.3インチのSSD1306モジュールと同じ感じでそのまま大きくしたような形。ピンヘッダはハンダ済みだった。

裏面。SSD1306とかSH1106だとPCBに直接フレキがハンダされているけどSSD1309はコネクタ式になっていた。フレキに書いてあるNFP0301-04AはLCDの品番なのかな?
3.3Vレギュレータ(ME6206A33XG-662K)も乗っているのでVDDに5V入れても大丈夫そう。左側はほぼOLED用の12.5Vを作り出す昇圧回路っぽい。C5は4.7uF程度のコンデンサが入ってるはずなんだけど未実装。動いているので良し…
一応SSD1309もi2cには対応しているんだけどこのモジュールだとBS1(LCD側の6番ピン)がGNDに直付けでモードを変更できなさそう。一旦コネクタ外さないとパターンカットもできなさそうだし…
I2Cで使うときはD1(LCD側14番)とD2(LCD側15番)をがSDAのIn OutになってショートしてSDAとして使うらしい。このモジュールだとD2がつながっていないけどこれは簡単にショートできそう。コネクタ剥がすの大変そう。

I2Cはちょっと大変そうだったので、とりあえずSPIで動作確認。今回もArduino環境でESP-WROOM-32を使用した。ライブラリはu8g2を使わせてもらった。
Hardware SPIを使用したかったのでVSPIに接続。SCL(SCLK)は18、SDA(MOSI)は23。DCとRSTは適当なピンを使用した。

さすが1.54インチ。この大きさだと結構文字が見やすい。SSD1309だと2.42インチもあるけどこっちは結構高いので1.54インチは結構コスパいいかもしれない。

SPI使うような高速書き換えしないのでI2Cで使えるように改造できれば手軽に使えて便利なんだけどなぁ

2020年2月15日土曜日

ST7789な1.3インチIPS LCDを試してみた。

0.96インチのOLED LCD(SSD1306)をよく使っていたんだけどももう少し大きいLCDが欲しくなって1.3インチ版を購入したんだけど、そのときにカラーなのに1.3インチ単色OLEDより安いLCDを見つけてしまった。それがこちらのST7789なIPS LCD。
ちなみにSPI接続。

結構小さい。
ストレートのピンヘッダも付属してきた。

今回入手したタイプはCSがないタイプ。ピンヘッダはケースに搭載したときに高さを控えられるようにL字タイプを下向きにつけてみた。部品に当たらないようにちょっと斜め向き。

今回はESP-WROOM-32に接続してテスト。
Arduino-ST7789-Libraryを使用させてもらった。このライブラリはAdafruit GFX Libraryも必要。
Hardware SPIを使用したかったのでVSPIに接続。SCL(SCLK)は18、SDA(MOSI)は23。DCとRSTは適当なピンを使用した。

さすが240x240の解像度。このサイズの文字でも潰れずに読める。
IPSだから発色もきれいだし視野角も広くて良いなぁ。
よくあるArduino向けのTN型カラーLCDって結構視野角が狭い気がするし。

ちなみにサイズ比較をしてみた。
おなじ1.3インチでもスクエアなのでサイズが結構違う気がする。

2020年2月7日金曜日

USB2CANをWindowsで使ってみた。

ラズパイ用のUSB2CANをWindowsでも使ってみた。Innomakerの純正ツールは少し使いにくかったので、microbusというツールを使ってみた。


USB2CANはWindows 10に接続すると自動でドライバがインストールされて、ユニバーサル シリアル バス デバイスの中に"USB2CAN v1"と"USB2CAN firmware upgrade interface"として認識される。

あとはmicrobus_0_2_1_dist_win32.rarをダウンロードしてきて解凍して、microbus.exeを実行する。
署名がないアプリなので、Windows Difenderに警告されるけど詳細情報をクリック。
すると実行ボタンが出てくるので実行できる。

ツールが起動したら再生ボタンを押すとデバイス設定画面が出る。
USB2CANはcandoAPIを介して認識されるのでcando0のBitrateを選択してOKを押すとモニタリングが開始できる。

同じIDからのデータを順次更新していくタイプの表示にしたい場合はaggregate by IDにチェックを入れると良い。
あとは右下からデータ送信もできる。
シンプルで使いやすいかも。

dbcファイルをインポートできるようなのでOBD2の解析にも使えるのかな