久しぶりにダイソーに行ったらUSB Type Cケーブルが売っていたので試しに買ってみた。
何種類かあったんだけど100円の5V3Aタイプにしてみた。2023年12月26日火曜日
ダイソーのUSB Type Cケーブルを買ってみた。
2023年11月23日木曜日
ESP32で昇降圧DCコンバータを使ってみた。
前にESP32搭載のラジコンでモータのノイズや電圧ドロップでESP32がリセットしてしまう対策に昇圧DCコンバータを使ってみたんだけど、安い昇降圧DCコンバータをAliespressで買ってみたので試してみた。Lipoを使うと結局4.2Vからどんどん下がって3Vになってしまうんだけど、わざわざ昇圧してから3.3VをLDOで作るのも効率が悪そうだし。
今回購入したのはDD0603SAっていうモジュール。ICの刻印は2149Fってなってる。ME2149っていうICっぽい。このIC自体は昇圧DCコンバータなんだけど、SEPIC方式の昇降圧DCコンバータとして動かしてる模様。
対応電圧が色々あったんだけど、たまたま3V版が安かったので3V版をポチってみた。ESP32で使うにはそのままでも問題ないと思うんだけど、他のICとかを考えると3.3Vにしておきたい。3.0V仕様ではR1が10kΩ、R2が14.0kΩになっていたんだけど、R1を10kΩ、R2を16.5kΩにすれば3.3V仕様に変更できるっぽい。
3.3V仕様にするのに16.5kΩがなかったので、適当なジャンクボードについていた16kΩを移植してみた。R2の抵抗値が高くなると電圧が高くなるんだと思うんだけど、16kΩでもすでに3.33V出ていたのでちょうどよかったのかもしれない(抵抗の誤差によるものかもしれないけど)
仕様的には0.9Vから6V入力まで対応なので1Sのリチウムイオンだけではなくて、Ni-MHでもESP32を駆動するのにはいい感じに使えそう。試しにESP32を搭載したメカナムラジコンに搭載してみた。このラジコンは1Sのリチウムイオンバッテリ駆動なんだけども、バッテリが減ってくるとESP32がリセットしてしまう対策に昇圧DCコンバータで4.5Vぐらいに昇圧してからLDOで3.3Vを作っていたので、このDCコンバータを使えば自動で昇降圧を切り替えてくれるので効率が良くなるはず…
結果的には駆動時間はほぼ変わらず。昇圧コンバータでノイズ対策したときと同じく、Lipoバッテリを3V付近まで使用できた。ラジコンの場合はESP32よりもモータでバッテリを消費するのでこの使い方の場合は昇圧コンバータ+LDOでも駆動時間はあんまり変わらないのかもしれない。Ni-MHを2本で長時間ESP32を駆動させるようなアプリケーションとか、ソーラバッテリでNi-MHを充電しつつ環境計測するようなシステムだと変わるのかな?
なんにせよ昇圧+LDOとお値段はあまり変わらないのではんだ付けとかなしで使うのであればDD0603の3.3V版を購入すればそのままESP32開発ボードに直結できるので良いかもしれない。
2023年11月19日日曜日
ハイブリッド中華イヤホンのKZ ZNAを買ってみた。
いままでPCではKZ ZSN ProXというハイブリッド中華イヤホンを使っていたんだけど、もう3年ぐらい使っているので11月11日セールで新しいイヤホンをポチってみた。2261円だったんだけど、ほかに300円ぐらいのものを同時にポチったのでセールで500円引きになった。(2500円で500円引きらしい)
今回購入したのはKZ ZNAってやつ。今回もDD1+BA1なんだけど、DDが12mmとなっているっぽい。ZSN ProXはたしか10mmだったはず。
パッケージはかなりコンパクト。プチプチの袋に入っていただけなのに凹んでいない。Aliexpress Standard Shipping早いし国内は結構ヤマトで届くことが多いので便利。裏面はこんな感じ。今回はマイク無し仕様にした。プレートはメタルで、穴から半透明の樹脂部品が出ている感じ。2023年11月18日土曜日
USB Type Cの2Sバランス充電モジュールを買ってみた。
2SのリポをUSB Type Cで充電できる基板が安く売っていたので試しに購入してみた。以前改造したメカナムホイールなラジコンとかだと模型用のDCモータだから1Sでも良かったし、USBで手軽に充電できるのが良かった。2SのリポもUSBで手軽に充電できたらもっとパワーが有るおもちゃが作れそう…
どうやらIP2326というコントローラチップを搭載した充電モジュールで、2Sと3Sのリポバッテリに対応できるみたい。半田ブリッジジャンパで切り替えられるようになっている。ちなみに2Sだとバランス充電もできちゃうみたい。
今回は2Sのバッテリが使いたかったのでもともと2S設定になってる基板を購入した。Aliexpressで199円だった。バッテリとの接続はコネクタにしたかったのでバランス充電器でよくあるJSTのXHシリーズにした。昔BeagleBone用に作った2SのバッテリもXHコネクタにしていたし。
このボード自体もXHコネクタを付けてくれと言わんばかりの設計。前回バッテリを作ったときに梅沢無線で買っていたサイド型のXHコネクタがそのまま装着できた。念のため買っておいてよかった…(梅沢が土曜日定休日になってから行ってないな
一応充電電流と充電電圧も変更できるっぽい。VSETは電圧設定で、未実装なので8.4Vになっていた。ISETは100kΩと180kΩが並列つなぎになっていて、64kΩに設定されている。なので充電電流は90000/64000で1.4Aになってるっぽい。最大1.5Aまで設定可能。
前に作った18650の2Sバッテリパックを充電してみた。5VのACアダプタに繋いでもちゃんと昇圧されて充電されてる。あとどうやらPDじゃなくてQCっぽいのでQC対応の充電器だと電圧が自動で切り替わる。中華の充電器のほうがQC対応してて、入力電圧が7Vになっていた。ちなみにLEDは赤が電源ランプ、青が充電中インジケータのようで、充電中はどっちも光っているので紫っぽく見える。充電が終わると青が消えて赤だけが点灯した状態になっていた。
これは使えそうなのでジャンクのバッテリパックを買ってきて2Sのバッテリパック作ろうかな。
2023年11月3日金曜日
DD4012SA DCコンバータを使ってみた。
ブレッドボード上で3.3Vを作るのにDD4012SAという降圧DCコンバータがコンパクトで良さそうだったのでポチってみた。いろんな電圧のバリエーションがあったのでESP32で使うのに3.3V版をチョイス。
ESP32は結構電流を食うのでスイッチングのほうが良さげだし。
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にも対応していたので試してみた。
技適マークも本体に刻印してほしいよなぁ#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()); } }
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問わずにランナップされているけど液晶付きのやつをよく解析されてる気がする。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; //データ出力頻度変更 } } } }
ちなみにRS485のModbus対応とかだったらLCDはついていないけどPZEM-017というのが存在するみたい。ただし200msぐらいでしか通信できないみたいなので、RS-232CとかでデータストリームするぐらいだったらPZEM-051を改造したほうがデータ更新頻度は高そう。
2023年9月10日日曜日
ESP32でトランシーバを作ってみた。
前回、ESP32でI2S DACとI2Sマイクを試してみたのでESP32で無線LANトランシーバを作ってみることに。ESP-NowやWiFiのUDP通信を使ってトランシーバを作っている人がいたのでとりあえずこの方のプログラムをArduino環境でビルドして使ってみることに。ESP-Nowを使えばWiFi APがないところでも気軽につかえるし、WiFi STAモードに切り替えればWiFi環境内ならどこでも通話できる。
原理とか動作デモとかもGithubのYoutubeリンクを見るとわかり安く説明されていた。I2Sマイクのノイズ対策とかも。
このソフトウェアはPlatformIOで作られているようだったんだけど、Arduino IDEでもビルドできそうな気がしたので試しにやってみた。
まずは上のリンクからソースコード一式をZIPでまるっとダウンロード。
Arduino IDEで新しいプロジェクトを作成して(今回はesp32-walkie-talkie.inoにした)、最初に生成されるsetup()やloop()を消してまっさらにする。
srcフォルダ内のmain.cppの中身をテキストエディタで開いてそこにコピペする。そしたら一旦inoファイルを保存してArduino IDEを閉じる。
Arduino環境だとinoファイルと同じ名前のフォルダが作成されてその中にesp32-walkie-talkie.inoが入ってると思うんだけど、そこにsrcフォルダ内のmain.cpp以外のファイル4つをコピーする。
あとはlibフォルダの中の各ライブラリ(5種類)の中のsrcフォルダの中身だけ(cppファイルとhファイルだけ)を全部inoファイルと同じフォルダにコピー。同じフォルダに30個以上のファイルができてちょっと見にくくなるんだけどこの状態でArduino IDEからinoファイルを開くと他のファイルを認識してタブが増えているはず。
あとはconfig.hタブを開いて<< YOUR_SSID >>とか書いてあるところを直してやればビルドできるはず。(SSIDとパスワードは""で囲んで記入する)
ESP-Nowを使う場合もこの部分を直しておかないと変な文字<<>>が入っているせいでビルドできないのでここに適当な文字を""で囲んで入れておくと良いかも。そして
#define USE_ESP_NOW
のところのコメントアウトを外すとESP-Nowでダイレクト接続される。(AP不要)
ちなみに今回はArduino IDE 2.1.1にESP32-Arduino-Core 2.0.6の組み合わせでビルド成功した。
ピンアサインはとりあえずこのプログラムのデフォルトを使用した。
INMP441のほうは
GND→GND
VDD→3.3V
SD→21
SCK→18
WS→19
L/R→3.3V(スケッチにはGNDに繋げば良さそうに書いてあったんだけどGNDだと鳴らなかったのでHIGHに)
MAX98357Aモジュールの方は
Vin→5V
GND→GND
SD→22
GAIN→何も繋がない(ゲインはデフォルト設定)
DIN→5
BCLK→18
LRC→19
こんな感じでI2Sの一部のピンはマイクとDACで共用である。
あと送信ボタン(プレスボタン)は23番Pinと3.3Vの間にタクトスイッチなどのプッシュボタンを接続。23がHighになると音声をもう片方に送信。Lowになると受信。
あとはこれを二台用意して送信ボタンを押したほうの音声がもう片方から再生される。
音声は結構きれい。SAMPLE_RATEは変えられるようになってるので距離が遠くなってデータレートが落ちそうな場合は下げてみると途切れずに送れるようになるかも。遅延も一旦バッファしている割には少ない感じ。
PCのUSBに繋いでデバッグしてるときはマイクはかなりノイズを拾ってる感じだった。プログラム書き換え後とりあえずモバイルバッテリに繋いで試してみたらだいぶ良くなったのでとりあえずはモバイルバッテリでテストした。(本家のマイク用ノイズ対策回路は入れていないため。)
バッテリを搭載してケースに入れたら結構使えるかも。通知音とか鳴らせるようにしたら面白そう。フラッシュ容量はまだ余裕がありそうだし。
スピーカーはジャンクノートPCのスピーカーを使ったけど秋月の小さいスピーカーとかDACとスピーカーが一体になっているM5StickC PLUS Speaker 2 HATとかを使ってもいいかも。音質は大きい方が良いのかもしれないけど…
ちなみにこのスケッチ、RISC-VのESP32-C3でも使用できた。ピン配は変更する必要があるけど、I2S DACとI2Sマイクを使用する設定であればESP32-C3でも普通に使える。ESP-NowでESP32とESP32-C3間で通話もできた。バッテリ駆動で作るならESP32-C3のほうが電池持ち良さそうだし。
2023年9月2日土曜日
ESP32でI2S接続のマイクを使ってみた
前回はESP32に外付けDACをつけてみたけど、今回はI2S接続のマイクを試してみた。
使用したのはINMP441を搭載したモジュール。Aliexpressで180円だった。ESP32にI2Sで接続して音声データを取得できる。
IC自体はこっち面についているんだけど、音声取り込み口は反対側に空いてる基板の穴から取り込むみたい。
このマイクモジュールとしてはこっち側は表面ということに。中央の穴がマイクの穴。
早速ESP32に接続して試してみた。
ライブラリを使用せずにファイルシステムにPCMデータを保存したりするサンプルが多いんだけど、そのままPCで聞けるとテストが楽で良いなぁとおもって探していたら便利なライブラリを発見。
このライブラリは音声関係のエンコーダやデコーダも入っていて、サンプルにI2Sのマイクから取り出したWAVEデータをブラウザでストリーミングできるサンプルも入っていた。
このサンプルはstreams-i2s-webserver_wav.inoのWiFi接続用SSIDとパスワードを変更するだけで、あとは解説ページでも同じくINMP441で解説されているので図のように接続するだけ。書き込み終わったらシリアルコンソールに出たIPアドレスに接続するとブラウザにストリーミングの画面が出るので再生ボタンを押すだけ。
結構プツプツとノイズが入るんだけどこれは電源ラインなのかなぁ?ちなみにファイルシステムに録音するサンプルも試してみたけどそちらは結構いい感じだった。調べてみるとINMP441はこのサンプルのように16Bitで使うとノイズが目立つとかで、ファイルシステムに録音するサンプルでは32bitで取ってきて処理を入れているようだった。
ストリーミングでもそんな事ができるのかもう少し検証してみるかな…
2023年8月26日土曜日
ESP32でMAX98357Aを使ってみた
I2S接続のモノラルなアンプ付きDACがAliexpressで155円だったのでポチってみた。送料は一応このDAC2個の他に3点入れても170円だった(トータル1000円かからないお買い物)
MAX98357A搭載のモジュールなんだけど、1チップでI2SのDACとD級アンプが内蔵されていてスピーカーと直結できる模様。モノラルなのでステレオで出したい場合は2個必要らしい。一応2個買ったけど。
ESP32でこのライブラリを使う場合のデフォルトピン配置は
LRC→25
BCLK→26
DIN→22
になっていた。このモジュールはアンプ内臓なのでVinは5Vに接続した。
client->flush();
while (client->available()) { client->read(); }
2023年7月2日日曜日
JNHのキャッシュ付きM.2 SSD 2TBを買ってみた。
最近SSDの空き容量が少なくなってきたのでM.2のSSDを探していたところ、JNHの2TBのSSDがリード7200MB/s、ライト6700MB/sなのに13500円ぐらいで売っていたのでポチってみた。Gen4対応だし、最近流行りのコスパ最強YMTC製NAND搭載のやつ。
聞いたことないメーカーだったけどパッケージは普通にいい感じ。TBWも1500TBとこの価格にしては高め。そしてDDR4のDRAMキャッシュ付き。2023年6月26日月曜日
QcK miniを新しくしてみた。
マウスパッドとしてSteelSeriesのQcKを使ってからずっとQcK miniを使い続けているんだけど、最近端っこが剥がれかけてきたので新しいのをポチってみた。
Amazonの購入履歴を見ると前回購入は2015年5月となっていたので実に8年も使っていた…
たしかに洗うといわゆるQcK汁が出てきて匂いがやばいのだがもうこんなに使っていたとは。
いろんなマウスパッドが出ているっぽいので一通り探してみたんだけど、結局なんだかんだコスパが良さそうなのでQcK miniをポチってしまった。
前回のパッケージは覚えていないけど丸まって届くスタイル。裏面にもロゴが印字されていた。前回購入したのは裏側は無地だったのに。少し進化している?表面にはSteelSeriesのロゴだけになっていた。前回購入品はSteelSeriesという文字も印刷されていたんだけど、新しいのはロゴだけに変更になったのかな。
2023年6月18日日曜日
GaN搭載 USB急速充電器を買ってみた
TypeCで充電するタイプのデバイスが増えてきたのでType Cが2ポートある充電器がほしいと思っていたんだけど、たまたまセールしていたのでポチってみた。
GOKiiっていうよくわからないメーカーなんだけど、GaNで45Wでセールでお安かったので…お値段の割にはパッケージもしっかりしている感じがある。質感は結構いい感じ。マットな手触りで傷が付きにくそう。出力はこんな感じ。2ポートを使うと25Wと20Wに切り替わるらしいのでiPhoneの急速充電もオッケー。電源に指すとLEDが青白く光る。光具合も程よい明るさで、光り方も均一で安っぽさはない感じ。Aukeyの65Wと比較。GaNの45Wにしては少し大きい?幅も少し広め。コンセントは折り畳める。2023年5月4日木曜日
Razer HUNTSMAN V2 TKLを買ってみた。
赤軸化したLogicool G610の特定のキーが効きにくくなって来てしまったので、キートップも結構減ってることもあって新しいキーボードを買ってみた。
友人にRealforceとか光学式スイッチを進められたので進められるがままにHUNTSMAN V2を買ってみた。一応現物を触ってから購入したんだけど、やっぱり最初の印象だけじゃわからないこともあるし、スペック買いである。
2023年4月30日日曜日
Twitter API 2でPythonからつぶやいてみた。
ラズパイ鯖のエラーとか状態を定期的にTwitterに投稿していて、結構この運用方法が便利だったんだけど、突然ツイートされなくなったのを発見したので直してみた。
というのも今まではTwitter API 1.1を使っているtcli.shというシェルスクリプトを使ってツイートしていたんだけども、API 2に以降が始まっていたらしい…
そして昨日までだったということをあとから知った。
API 2に対応しないといけないんだけど、tcli.shのサイトはもうなさそうだしだいぶ前から使っていたので一新することにした。
とりあえずPythonで便利そうなライブラリが合ったのでそちらを使ってみることに。
このpython-twitter-v2を使えば簡単に作れそう。
まずはTwitter DeveloperにログオンしてV2への以降を行う。とりあえずFreeアカウントで良かったのでアプリのページを開いて上の方にV2へのリンクが出ていたのでそちらをクリックして赤いDowngradeボタンを押す。
そしてプロジェクトを作成しないといけないのでProjects & AppsのOverviewでプロジェクトを作成する。プロジェクト名とか説明をつけてStep 4で今まで使っていたアプリを選択すればOK。
Consumer KeyもConsumer Secretもそのまま使えそう。
そんでもってpipでpython-twitter-v2をインストールする。
python3 -m pip install python-twitter-v2
あとはアプリ認証のURLを生成する。
from pytwitter import Api api = Api(consumer_key="Consumer Key",consumer_secret="Consumer Secret",oauth_flow=True) print(api.get_authorize_url())
これで実行するとURLが生成されるのでこれをブラウザとかに貼り付けて使いたいTwitterアカウントからアプリ認証をする。するとリダイレクト用の設定したURLに飛ばされるのでそれをコピーする。(URLの後ろにキーとか色々ついてくる)
先程の3行めをコメントアウトして
print(api.generate_access_token(response="ログオンして帰ってきたURL"))
これを追加してもう一度実行。
そうするとoauth_tokenとoauth_token_secretが返ってくるのでそれをメモる。
import sys from pytwitter import Api api = Api( consumer_key = 'Consumer Key', consumer_secret = 'Consumer Secret', access_token = 'oauth_token', access_secret = 'oauth_token_secret' ) args = sys.argv api.create_tweet(text = args[1])
これをtcli.pyとかで保存して
python3 tcli.py "ツイートしたい文"
で実行すればツイートできる。
とりあえずこれでまたラズパイからつぶやけるぞ。
2023年4月2日日曜日
DD-WRTでクライアントにNTP鯖を強制的にリダイレクトしてみた。
WiFiにつながるデバイスが増える中でRTCを持たずにNTPサーバから時計を取ってくるデバイスが増えてると思うんだけども、NTPサーバを強制的に変更できないか試してみた。
微妙に時間がズレてるのとか気になるし。中華デバイスとかだと鯖も中華とかなのかな。
方法としてはNTP鯖が特定できればルータのhostsとかdnsmasqで飛ばせたりするんだろうけども、今回はiptablesでNTPポートの123を特定のNTP鯖に飛ばすようにしてみた。
iptables -t nat -A PREROUTING -p udp -m udp --dport 123 -j DNAT --to-destination 162.159.200.1:123 iptables -t nat -A POSTROUTING -p udp --sport 123 -j SNAT --to-source 162.159.200.1:123
DD-WRT化したルータなのでiptablesがそのまま使えるのでWebアクセスでSSHを有効にしてSSHからこの2行のコマンドを実行した。NTP鯖はCloudflare Time Servicesを使わせてもらった。これでこのルータに繋がっているデバイスからNTPのポート123にアクセスする場合は全部指定したIPアドレス(162.159.200.1)の鯖につながるようになる。
ためしにコントロールパネルの日付と時刻から適当な鯖にインターネット時刻設定するとうまく同期できるようになってる。でも適当なアドレスではだめっぽい。DNSでIPが返ってくるような存在するアドレスであればうまく設定される。
ちなみにこの設定、ルーターを再起動するとリセットされてしまうので、常に有効にしたい場合はAdministration→CommandsでStartupに入れておくといいかも。削除したい場合は
iptables -t nat -L --line-numbers
でリストを表示してから
iptables -t nat -D [リストの項目] [番号]
で削除できる。(デフォルト状態からの追加だと、iptables -t nat -D PREROUTING 3とiptables -t nat -D POSTROUTING 6だった)
ローカル環境でRTCを持たないデバイスにRTCを持つデバイスからNTPしたい場合にも使えるかも。
2023年3月18日土曜日
DD-WRTでDNS広告ブロックを設定してみる。
この前ルーターが壊れて更新したので、前のルータでやっていたことを思い出しながら元に戻してくことに。壊れたルータにはアクセスできないし…
その一つがDNSブロッカー。広告をブロックするためにDNSをブロックしてしまうやつ。仕組み的にはhostsファイルにブロックしたいDNSを127.0.0.1に飛ばすように設定するやつ。
元々シェルスクリプトで定期実行していたので記憶を頼りに探してみたところ、DD-WRTのフォーラムにそれっぽいスクリプトが。今回はこれをベースにカスタマイズして見ることに。
WZR-1750DHP2はフラッシュ領域がたくさんあるので、JFFS2 SupportとSSHを有効にしてWinSCPなどを使ってSCPでアクセス。
/jffs/にadblock.shというファイルを作って、パーミッションを755に設定。
#!/bin/sh logger WAN up script executing if test -s /tmp/hosts0 then rm /tmp/hosts0 fi logger Downloading http://www.mvps.org/winhelp2002/hosts.txt (curl -k -s https://winhelp2002.mvps.org/hosts.txt | sed '2,$s/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' | grep -v localhost ; curl -k -s https://280blocker.net/files/280blocker_domain_$(date +"%Y%m").txt | sed 's/^/127.0.0.1 /g; s/[[:space:]]*#.*$//g;' | grep -v localhost ; #curl -k -s https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardDNS.txt | # sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' | # grep -v localhost ; #curl -k -s https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt | # grep "^||" | grep -v "*" | sed 's/||/127.0.0.1 /g'| tr -d '^'; curl -k -s https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardMobileAds.txt | sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' | grep -v localhost ; #curl -k -s https://raw.githubusercontent.com/multiverse2011/adawaylist-jp/master/hosts | # sed 's/127.0.0.1/127.0.0.1/g; s/[[:space:]]*#.*$//g;' | # grep -v localhost ; curl -k -s https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt | sed 's/^/127.0.0.1 /g; s/[[:space:]]*#.*$//g;' | grep -v localhost ; curl -k -s https://warui.intaa.net/adhosts/hosts.txt | sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' | grep -v localhost ; ### Extra blocking dns ### echo 127.0.0.1 adm.shinobi.jp ) | tr ' ' '\t' |
tr -s '\t' | tr -d '\015' | sed '/^$/d' | sort -u >/tmp/hosts0 ### Extra blocking dns end ### ### White List ### sed '/vortex.data.microsoft.com/d' /tmp/hosts0 -i ### White List end ### grep addn-hosts /tmp/dnsmasq.conf || echo "addn-hosts=/tmp/hosts0" >>/tmp/dnsmasq.conf logger Restarting dnsmasq killall dnsmasq dnsmasq --conf-file=/tmp/dnsmasq.conf