ArduinoをMikrotikに接続します。 安価で怒っているリモート負荷管理

「膝の上」の統合について説明したいと思いますが、それでも数か月間、私の自宅の研究所で問題なく機能しています。



自己組み立て型の鉄製サーバーが1つあります。これをNASと呼びましょう。これには1つの奇妙な機能があります。 定期的な再起動中に定期的に、シャットダウンの準備の最終段階で停止し、リセットに達しません。 オンのままで制御不能です。 まれに再起動しますが、「グリッチ」が発生します。 率直に言って、私に理由を探すのは少し面倒です。 たぶんいつかBIOSを更新するか、次の更新でOSが修正されるのを待つでしょう。 しかし、一方で、私はまだ自分のインフラストラクチャを制御したいので、別の方法で行くことにしました。 はい、サーバーはHP iLO、Intel vPro、および有用ではあるが「できなかった」他の同様の機能をサポートしていないことをすぐにお知らせします。



そのため、サーバー自体の電源をオフにできない場合は、電力制御回路にネットワーク制御用のリレーとポートを備えた自律デバイスを接続する必要があります。 さまざまな機能を備えた産業用コントローラーまで、さまざまなお金でこのようなデバイスがたくさんあります。 しかし、あなたは何に基づいて最小限の時間とお金で自分でそれを構築することができます。 次のコンポーネントを使用しました。

1.無料のUSBポートを備えたMikrotik RB951G-2HnDルーター。これはネットワークで積極的に使用されています。

2. DIY Arduino Mega 2560用ボード

3. Power Server(ATX)ボタンを押すエミュレーション用のフォトカプラ4N35。

接続します。 制御回路の準備ができました!



Mikrotik RB951G-2HnD <-USBSerial-> Arduino Mega 2560 <-フォトカプラ->電源ボタンNAS



そして今、それを機能させる方法についての詳細。



Mikrotikでできること



Mikrotikドキュメント( http://wiki.mikrotik.com/wiki/Supported_Hardware )を検索すると、RouterOS USBSerialでサポートされているデバイスとメーカーのリストが提供され、それらはFTDIとProlificのチップであることが判明しました。 これは前向きな結果への希望を呼び起こします。 私が自由に使えるのは、ATmega8U2チップを搭載したArduino Mega 2560ボードと、FTDI FT232RLを搭載した可用性の低いArduino Mega 1280です。 私は後者を接続する可能性を特に疑いませんでしたが、最初のボードはより興味がありました。 Arduino Mega 2560のUSBポートはATmega8U2マイクロコントローラーに接続されており、USBSerialファームウェアが回転しています。必要に応じてUSB HIDキーボードファームウェアに置き換えることができます。 一般に、USBSerial ATmega8U2がMikrotikで決定されたかどうかは明確ではありませんでしたが、RouterOSはATmega8U2で接続されたArduinoを完全に認識し、USBSerialポートをインストールすることがわかりました。











そして、Arduinoでできること



Arduino制御インターフェースおよび周辺機器のいくつかのオプションに反映されます。 最初は、リモートコントロール用のマスタースレーブプロトコル(Modbus RTUなど)を縫うと考えました。 しかし、彼にとっては、仮想ポートを管理者のワークステーションに転送し(Mikrotik Webサイトにそのような仮想ポートを接続する方法の説明があります)、Arduinoファームウェアに加えて、Modbusポーリングのようなプログラムを直接編集してModbusレジスタを編集するための別のクライアントModbusアプリケーションを書く必要があります。 操作が複雑すぎるため、このオプションはあまり好きではありませんでした。 とても早く、Linux Bashに似たArduinoのテキストコマンドシェルのアイデアを思いつきました。 そして、そのようなコマンドプロセッサはすでに親切な人々によって書かれていることが判明しました。 私はそれを使用することにしました。 プロジェクトサイト: bitlash.net

bitlash here! v2.0 (c) 2012 Bill Roy -type HELP- 942 bytes free > print "Hello, world!", millis() Hello, world! 11939 >
      
      





bitlashコマンドシェルは非常に開発されたことが判明し、私のタスクを興味深くカバーしました。 その中で、不揮発性EEPROMに書き込まれるコマンドマクロと開始マクロを作成できます。 Powerサーバーボタンを制御するための私のセットは、lsコマンドからの出力です。

 > ls function off12 {d12=1;delay(8000);d12=0;}; function startup {pinmode(12,1);}; function on12 {d12=1;delay(250);d12=0;}; >
      
      





Arduinoが起動すると、ディスクリート出力12が記録用に設定されます(起動マクロ)。 管理者は、コマンドラインに「on12」、「off12」という短いコマンドを記述して、サーバーの電源を入れて「ハード」シャットダウンしたり、新しいマクロを編集および作成したりできます。



私のプロジェクトでは、Arduino Megaを使用していましたが、Arduino Due、またはNanoをFTDI FT232RL、ATmega16U2をusbserialファームウェアに置き換えることができると確信しています。



周辺機器Arduino。 オプトカプラー



コントロールのハードウェアを使用すると、すべてが非常に簡単です。 リレーモジュールを接続すると、ガルバニック絶縁と強力な負荷を制御する機能が提供されます。これは最も汎用的なオプションです。

しかし、私自身のために、私は違ったやり方をしました。 サーバーをオン/オフするだけで(保証付きでこれを行うことができます)、4N35フォトカプラーの出力を電源オン/オフボタンの端子に接続するだけで、ガルバニック絶縁が得られました。

スキームはおよそ次のとおりです。









サーバーの電源ボタンに並列に接続する出力。 極性が重要であるため、「pokeメソッド」を使用して簡単に選択できます。 Arduinoのピン12とオプトカプラーの間には、約500オームの抵抗が設定されています。



TelnetのMikrotikの転送シリアルポート



最後の仕上げ。 シリアルポートをMikrotikのTCPポートに転送して、コンソールを整理しましょう。 私はtelnetをMikrotik自体のサービスとして使用していないため、明確な良心をもってこのポートをArduinoコンソールに提供します。 ローカルネットワークアドレスからのみアクセスを許可します。 おそらくファイアウォールでさらに2、3の禁止ルールがあります。

ポート設定:









ビデオでは、Telnetを介して接続し、マクロコマンドを実行するプロセス:





おわりに



収縮抵抗オプトカプラー:









コンテナ内のコントローラー:









Arduino接続が開かれるたびに、再起動します シリアルポートが再び開かれます。これは理論的には作業の安定性にもプラスの影響を与えます。 将来、多くの負荷を管理できます。 温度センサーを固定し、この温度を出力するコマンドを書くと、アナログ信号とディスクリート信号を監視できます。 コマンドは、通常のターミナルプログラム(Putty、TeraTerm)でTelnet(またはRaw)接続に入力されます。 さらに、原則として、ArduinoターミナルおよびRouterOS Mikrotikスクリプトからコマンドを送信できます。

さらに先へ進むことができます。 別のUSB <-> UARTコンバーターを使用して別のArduino UART(2)とMikrotikに接続し、組み込みUSB ATmega16U2(8U2)コントローラーでキーボードのHIDファームウェアを入力すると、VとMなしでのみKVMと同様になります:) 、つまり リモートアクセスを備えたハードウェアキーボードエミュレータ。 一般に、必要に応じてさらに多くのことができます。



All Articles