2023年10月30日月曜日

Tverが見れなくなったのはDNSブロックのせいだった。

 Tverが見られなくなったと言われたので、調査してみるとどうやら広告ブロック対策されているようで、uBlock OriginでブロックされていたURLを外しながら調査してみた。
なぜかiPadだけは見れててFire TVも見れないらしい。

結果的にuBlockだけではなくてルーターでもシェルスクリプトでDNSブロックしていたのでそちらを解除しないとだめだった。この前HALOの実績が解除できなくなったパターンと同様に広告ブロックのシェルスクリプト

sed '/imasdk.googleapis.com/d' /tmp/hosts0 -i

を追加することでみられるようになった。他のDNSブロッカーで困ってる人たちもいるようだけど、おそらく"imasdk.googleapis.com"をホワイトリストに追加すれば行けるんじゃないだろうか。

2023年10月28日土曜日

Steam版Haloで実績解除されないのはルータのせいだった

 久しぶりにPC版のHalo: The Master Chief Collectionをやっている。Halo4まで入っているのでなかなかのボリュームで、さらには実績の数が700個もある。

ついでに実績も解除しておこうということでXbox one版の攻略サイトを見ながら実績解除をしていたんだけどHalo 2でターミナルの実績が解除されない…

レベルとかそういう条件が合ったのかな?とか思ってぐぐってみると、実はHaloの実績解除されない問題の原因としてファイアーウォールの可能性もあるとか。

ということでここの書き込みをもとにコマンドプロンプトから

ping vortex.data.microsoft.com

をしてみるとIPアドレスが127.0.0.1(ローカルホスト)に向かってPingをしている…
つまりルーターの広告ブロッカーでこのアドレスがテキトーなIPに割り当てられているのでアクセスできないという。

DD-WRT化したルーターにDNSブロックのスクリプトを入れていたのでvortex.data.microsoft.comをブロックリストから外すようにしてpingを打つと今度はonedscolprdeus05.eastus.cloudapp.azure.com [20.42.65.85]という表示になったのでちゃんとした宛先に繋がってそう。

PiHoleを使ってる場合もホワイトリストに追加した方がいいアドレスが2つほどあるらしいのでそちらも確認してみたけどこっちはブロックされていなかった。

とりあえずルーターの広告ブロッカーを設定してもう一度ターミナルに行く前に一番簡単で実績解除をしていなかった"シールド不足"っていう実績を試してみた。これはHalo2で難易度アドバンスまたはレジェンドで、ストリーキング スカルだけをオンにするだけなんだけど、ムービーだけの1:"異端者"や戦闘のない2:"武器庫"だけでも取れる。とりあえずストリーキングスカルをオンにしてレジェンドで最初から始めれば勝手に解除される。

とりあえず異端者のムービーが終わって武器庫が始まった瞬間に解除されたので今回の実績解除されない問題はDNSブロッカーだったということに。次にターミナルの実績を解除しに行ったんだけど無事解除された。

ちなみにレジェンドクリアのカウントはいくつかの実績を解除していったらちゃんとカウントされてるっぽかった。"オプションとキャリア"で一応実績の解除具合が確認できるんだけど、そこのカウントが元々0でおかしいなーと思っていたやつもDNSブロックを外してなんかやってる間に更新されていた。しかし、DNSブロック中に開いたターミナルとか、その場で実績解除されたり、カウントしていたりする実績はもう一回やらないとだめっぽい。でもフィギュアの実績はつながるようになったら一気に解除された。

Halo2のレジェンドクリア実績はスカラベスカルをオンのままでも取れそうなのでとりあえずスカラベスカルをオンでやってみようかな。(自爆で何度もリトライしてるけど…)昔友人とCOOPでなんとかクリアできたような気がしてるし。

Xbox Oneコントローラでやってみてるけど、やっぱりHaloはパットでも行ける気がする。ファームウェア更新でBluetoothも切れにくくなってるし。


2023年10月22日日曜日

ラズパイPicoWのBluetoothでSPPを使ってみた

 Raspberry Pi Pico Wは元々WiFiとBluetooth対応のワイヤレスモジュールを搭載していたのにもかかわらず最初はWiFiしか使えなかったんだけど、SDKがいつの間にかBluetoothにも対応していたので試してみた。

技適マークも本体に刻印してほしいよなぁ

環境はArduino IDE 2.2.1にEarle F. PhilhowerさんのArduino Core 3.6.0を使用した。こっちのほうがビルドが早いし。

SerialBTライブラリを覗いてみたんだけど、ESP32のBluetoothSerialみたいに接続状態のステータスを確認したりできないっぽい(private関数内にはあるようだけど)
とりあえずESP32でやったみたいにUARTデバイスをBluetooth化するスケッチを作ってみた。
#include <SerialBT.h>

void setup() {
  Serial2.setTX(4);
  Serial2.setRX(5);
  Serial2.begin(115200);//有線デバイスのBaudrateに合わせる

  SerialBT.begin();
  gap_set_local_name("PicoW BT");//Bleutoothデバイス名変更
}

void loop() {
  if (Serial2.available()) {
    SerialBT.write(Serial2.read());
  }
  if (SerialBT.available()) {
    Serial2.write(SerialBT.read());
  }
}

これでGP4(TX)とGP5(RX)に接続したUARTデバイスをBluetooth SPP化できる。いわゆる透過モードってやつ。例によってBluetoothの仮想COMポートに接続するときはBaudrateは何に設定しても問題なく接続できるんだけど、有線デバイス側のBaudrateを変えたいときはスケッチから変更しないといけない。RN42みたいにコンフィグモードとかを実装すればいいんだけれども…

デバイス名変更とかはライブラリの関数では用意されてなかったので直接弄ってるけど、ステータスとかも取得できるかもしれない。
Windowsの仕様でCOMポートは2つ認識されるんだけど"PicoW Serial"ってなってない方は削除してもOK。ちなみに上のスクショはデバイス名を変更する前に取ったスクショなのでデバイス名がデフォルトの長いやつになってる。

今のところはESP32のほうがステータスLED実装できたりするので便利かもしれない。

例によって5V系のマイコンにつなぐときはI2Cとか用のレベルコンバータを使用すると良いと思う。

2023年10月20日金曜日

デジタルワットメーターをArduinoに繋いでみた。

 PZEM-051っていうDCのデジタルワットメータを解析している人がいて、Arduinoでデータを取り込めるらしいのでやってみた。PZEM-021でも良かったんだけど、PZEM-021だとシャント抵抗内蔵で20Aまで。PZEM-051だと50Aか100Aのシャント抵抗が外付けっぽい。

KT-D1384っていうそっくりなやつがあったんだけど、結局中身はPZEM-051だった。中華製なので出荷時期によって変わったりするかもしれないから注意なんだろうけど…

PZEM-051の裏面の蓋を開けてみるとこの基板はPZEM-051(v5.0)だった。PEACEFAIRっていうメーカー、一応PCに出力できるタイプのワットメータもAC、DC問わずにランナップされているけど液晶付きのやつをよく解析されてる気がする。
このモデルの場合はTM1621BっていうLCDコントローラとMCUの間のSPI通信を解析して実現しているっぽい。

GithubにはPower Meter LoggerとしてArduinoのスケッチも公開してくれているので、ありがたく利用させていただくことに。LoggerってなってるけどESP32のシリアルコンソールから流しているだけっぽい。

PZEM-051はテストパッドが出ているので、T1をCS_PIN、T2をCLK_PIN、T3をDATA_PINに接続すれば良い。間に保護用の抵抗入れたほうが良いかな?
回路を見るとVDDっていうテストパッドに3.3Vが来ているし、それでLEDのバックライトをつけたりしているので低消費電力な3.3Vマイコンなら電源もいただけるのではないかなということでAttiny1614で試してみることに。スケッチのサイズが4kbを超えるのでAttiny402は厳しそうだったので…
void loop() {
  static unsigned int updateRate = 200;//データ出力頻度
  static unsigned long lastUpdate = 0;
  if (lastUpdate + updateRate <= millis()) //updateRate[ms]周期で実行
  {
    lastUpdate = millis();//次の実行のために現在時間格納
    Serial.print(get_voltage());
    Serial.print(" V\t");
    Serial.print(get_current());
    Serial.print(" A\t");
    Serial.print(get_power());
    Serial.print(" W\t");
    Serial.print(get_energy());
    Serial.println(" Wh");
  }
  if (Serial.available() > 0) { // シリアルバッファチェック
    char in = Serial.read();
    if (in == 't') {
      unsigned int input = Serial.parseInt();
      if (input >= 50) {
        updateRate = input; //データ出力頻度変更
      }
    }
  }
}
そんでもってloopのところだけ上のように変更した。電圧、電流、電力、電力量をタブ区切りで出力できるようにして、出力頻度を変更できるようにした。
シリアルでt1000って送ると1秒間隔でデータが送られてくるような感じ。

ロギングしたいのであればこれにOpenLogを接続しても良いし、ESP32を接続してWiFi対応にしても面白いかも。ESP32は電力を食うので別なDCコンバータとかから電源を用意しないといけないかもしれないけど。
ちなみにRS485のModbus対応とかだったらLCDはついていないけどPZEM-017というのが存在するみたい。ただし200msぐらいでしか通信できないみたいなので、RS-232CとかでデータストリームするぐらいだったらPZEM-051を改造したほうがデータ更新頻度は高そう。