Iron Budget Habramerを公開します。
ZhBKを使用すると、カルマ、評価、および総合評価の位置のパラメーターを測定および表示できます。 さらに、ソフトウェアと比較して好意的に比較され、新鮮なhabratopikを監視して、お気に入りに追加されたプラス、マイナス、ビューの合計数を表示できます。 この不名誉はすべてアルドゥインに実装されています(はい、退屈なアルドゥインですが、ここにハイライトがありますので、読んでください)。
すでにそのようなものを収集するために彼の手をcombいた?
必要なものは、LCD 1602スクリーン、わずかな値の可変抵抗器、arduino pro mini、およびpl-2303への安価なusb-ttlアダプターだけです。 創造性のために設定された非常に予算。 LCD画面-80ルーブル、抵抗器-ミニについてはarduino-100ルーブル、usb-ttl-30ルーブル、経験は貴重です。
画面は、インターネット上にある画像の標準的な指示に従って接続され、輝度が調整され、USBが接続されます。
2番目に重要なのはルーターです。 サポートされているハードウェアのリストは、 wiki.openwrt.org / toh / startにあります。
各ルーターのファームウェアは個別ですが、OpenWRT WebサイトのWikiで詳しく説明されているため、説明しません。 すぐに内部UARTコネクターを取り出すのが最善であり、それを復活させることができます。また、パテを使用すると、スクリプトのデバッグが容易になります。すべてのデータはシリアルポート経由で出力されます。 テスト中に、COM + ttftpサーバーを介してファームウェアを数回復元しました。 鉄の使用および初期インストールに関するすべてのマニュアルは、サイトにあります。
ファームウェアをインターネットに設定した後、通常はopenWRTを使用してホームルーターからWANルーターにケーブルを挿入するだけで十分で、インターネットは既にデバイスにあります。 Webインターフェイスを使用して、wi-fi経由で自分でインターネットを設定しました。 すべてのファームウェアにすぐにWebインターフェイスがあるわけではありません。ルーターのマニュアルを参照してください。
したがって、Openwrtがルーター上にあり、インターネット上でルーターが構成され、ログインしたPuttyを介してコマンドを実行する準備ができていると、半日が経過したと想定します。
必要なパッケージを追加します。 (wgetを更新する必要がありました-ルーターのバージョンはcookieをサポートしていませんでした-それについては後で)
opkg update opkg install wget opkg install kmod-usb-acm opkg install kmod-usb-serial-pl2303
Arduinsに別のUSBアダプターを使用する場合-パッケージをこのアダプターの下に置く必要があります。 アクションの結果として、デバイス/ dev / ttyUSB0が表示されるはずです(異なる方法で呼ばれる場合があります。ファームウェアとUSB-comアダプターのパッケージに依存します)
/ usr /に移動し、次の内容(たとえばHabrovtsy様、コード内の0000(4つのゼロ)を削除する必要があるup.shなどのスクリプトを作成します-値が選択されたトリガーの存在によりhabratopikのテキストが誤って解析されることが判明しました、 Habrameterが機能するように遅延をやり直し、ゼロを追加しました)
非表示のテキスト
wget --load-cookies /usr/cookies.txt -U "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0" http://habrahabr.ru/post/220893/ -O /tmp/index.html awk -F ';' '/&ua0000rr;/ {print substr($2,0,index($2," " ))}' /tmp/index.html>/usr/up.txt UP=`awk 'NR == 1' /usr/up.txt` echo 'u='$UP > /dev/ttyUSB0 awk -F ';' '/&ua0000rr;/ {print substr($3,0,5)}' /tmp/index.html>/usr/down.txt sed 's/\"/ /g' /usr/down.txt>/usr/down2.txt DOWN=`awk 'NR == 1{print$1}' /usr/down2.txt` echo 'd='$DOWN > /dev/ttyUSB0 VW=`awk -F '>' '/pageviews/ {print substr($2,0,index($2,"<" )-1)}' /tmp/index.html` echo 'v='$VW > /dev/ttyUSB0 FW=`awk -F '>' '/favs_count/ {print substr($2,0,index($2,"<" )-1)}' /tmp/index.html` echo 'f='$FW > /dev/ttyUSB0 wget http://habrahabr.ru/api/profile/romanvl/ -O /tmp/index2.html KARMA=`awk -F '>' '/karma/ {print int(substr($2,0,index($2,"<" )-1))}' /tmp/index2.html` echo 'k='$KARMA > /dev/ttyUSB0 RATE=`awk -F '>' '/rating>/ {print int(substr($2,0,index($2,"<" )-1))}' /tmp/index2.html` echo 'r='$RATE > /dev/ttyUSB0 POS=`awk -F '>' '/ratingPosition/ {print substr($2,0,index($2,"<" )-1)}' /tmp/index2.html` echo 'p='$POS > /dev/ttyUSB0
ここで説明が必要です。
1)Habréでの承認は何かを伴うものです。 承認なしで、habratopikレーティングのデータ、つまり ゲストには必要な番号が表示されません。 したがって、ブラウザから保存されたCookieは、ハブへのログインに成功した後に使用されますCookie Exporter 1.5-すべてのCookieをWgetが理解できる形式でエクスポートするFFのアドオンを使用しました。 WinSCPを介して/ usrフォルダーのルーターにアップロードしました/ Cookieを部外者に転送しないことを強くお勧めします。
2)必要な値の解析はawkを介して行われます。これは豪華なことですが、単純なユーザーにはまったく関係ありません=)。 長い間awkに苦しみ、面白い松葉杖を作りました。その結果、私は結果が良くなったと確信していますが、私にとってはうまくいきます(c)
3)カルマの値は公式ソースから取得しましたが、habratopikのデータと同じ方法で解析することはできました。
4)データは非常に興味深い方法でarduinoに転送されます! ArduinをUSB経由でルーターに接続すると、ポートの両側で9600の速度で通信が可能になります(pl-2303のパッケージのデフォルト速度を変更しなかったので、理由はありません)Arduinoにデータラインを送信できました。行を解析して表示します。 しかし! 最も成功した方法で、私はこのbitlash.netに出会いました (誰かが最初に見たら、シックなものを見てください)。簡単に言えば-これはコマンドのインタプリタです。 コマンドラインからarduinoをプログラムできます。 私の場合、変数の値を送信し、画面に表示します。 ドックを読むことをお勧めします。私にとっては啓示でした。 コードを実行する前に、ビットラッシュライブラリをダウンロードしてインストールします
Arduinsのコード
非表示のテキスト
#include "bitlash.h" #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); byte UP[8] = { 0b00100, 0b01010, 0b10001, 0b11011, 0b01010, 0b01010, 0b01010, 0b01110 }; byte DWN[8] = { 0b01110, 0b01010, 0b01010, 0b01010, 0b11011, 0b10001, 0b01010, 0b00100 }; byte FW[8] = { 0b00100, 0b10101, 0b11111, 0b01110, 0b01110, 0b11011, 0b10001, 0b00000 }; byte VW[8] = { 0b00000, 0b00000, 0b01110, 0b10001, 0b10101, 0b10001, 0b01110, 0b00000 }; void setup(void) { lcd.createChar(0, UP); lcd.createChar(1, DWN); lcd.createChar(2, FW); lcd.createChar(3, VW); initBitlash(9600); lcd.begin(16, 2); } void loop(void) { lcd.setCursor(0,0); // lcd.print("U"); lcd.write((uint8_t)0); lcd.print(getVar(20)); // lcd.print("D"); lcd.write((uint8_t)1); lcd.print(getVar(3)); // lcd.print("F"); lcd.write((uint8_t)2); lcd.print(getVar(5)); //lcd.print("V"); lcd.write((uint8_t)3); lcd.print(getVar(21)); lcd.setCursor(0, 1); lcd.print("K"); lcd.print(getVar(10)); lcd.print(" R"); lcd.print(getVar(17)); lcd.print(" P"); lcd.print(getVar(15)); runBitlash(); }
kronerを介してup.shスクリプトを実行し、arduinoをUSB経由でルーターに接続すると、habromerの準備が整います。