継続的統合などのためのイーサネットランプ

画像 すべてのユーザーにこんにちは! 少し前に、 Amperkaプロジェクトが開始されました。 関心顕著だったので、開発を続けています。 そして、これは私たちの最初の企業ブログ投稿です。



今日は、Arduinoをベースにしたガジェットを作成した経験を共有したいと思います。 そして、それが有用であることがわからない場合、デバイスでの作業のいくつかの側面が興味深いものになることを期待しています。



このガジェットは、ローカルネットワーク上で送信されるメッセージに応じて異なる色で点灯するランプです。 なぜこれが必要ですか? 個人的には、4人のプログラマのチームの一員として、このことはContinuous Integrationサーバーの動作を示すために必要です。 もちろん、サーバーは、アセンブリが失敗したときに電子メールとジャバーに通知を送信できますが、退屈で便利ではありません:どこで見て、プロジェクトで何が起こっているかをすぐに理解する方法はありません:すべてが正常である、すべてが悪い、または今すぐですアセンブリ。



問題は新しいものではありません。 信号機、溶岩ランプ、USBフラッシャーをコンピューターにねじ込むことで、人々が空腹になった様子を 読みました。 オフィスに持ち込み、ハブに固定できるシンプルなことをしたかったのです! そして、それはタンバリンなしで動作するように。 さあ、やってみましょう!



Arduino、そのためのイーサネットシールド、Leroy-Merlinの不良ランプ、異なる色の3つのLEDストリップ、ほんの一握り、忍耐力が必要です。



デバイスは設定なしで動作し、すぐにイーサネットハブから情報を収集します。 これをどのように行うのが最善かを考えて、ランプがDHCPを介してIPを取得するようにし、特定のポートをリッスンして、点灯する必要のある色を伝えるUDPパケットをキャッチします。 彼らが最後に言ったように、とても輝いています。 そして、彼らをそこに送る人は誰でも、ランプは関係ありません。 その場合、ガジェットはCIサーバーだけでなく、あらゆるものに使用できます。



試作機



デバイスにポート7190でリッスンさせ、「4バイトのヘッダー、1バイト-将来のニーズに合わせて、3バイトのRGBカラー」の形式のパケットをキャッチさせます。 そして、30秒間信号がない場合は、白く点灯します。何かが間違っていることを理解することができます。



ファームウェアを書くために座っています。 そして、最初の失望は次のとおりです。Arduinoの標準ライブラリはDHCPもUDPも提供しません。 しかし、Arduinoは、コミュニティのためではないにしても、彼らではありません。 愛好家からの必要な開発はすぐに見つかりました( DHCPUDP )。 この投稿をコードで混乱させることはありません。 ワンダーランプファームウェアのソースコード全体がBitbucketで公開されています。 ここで、ファームウェア自体と関連するユーティリティについては、後で説明します。 コードがどのように見えるか疑問に思っているだけなら、メインのapp.cppファイルから掘り始めてください 。 C ++の基本的な知識があれば、コードは明確でなければなりません。



ランプがネットワークパケットを認識するかどうかをすばやくテストするために、コマンドラインからブロードキャストする必要のある色を受け入れる小さなスクリプトを作成し、たとえば毎秒ブロードキャストします。 うーん...しかし、ランプはどのIPを取得しますか? もちろん、混乱して、ネットワーク内のイーサネットランプを検索するためのある種のディスカバリサービスを実装できますが、私には思えます-これは多すぎます。 その後、私は素晴らしいものがあることを思い出しました

IPブロードキャストの一部 。 一番下の行は、パケットをIP 192.168.1に送信する場合です。 255 、それから192.168.1.xxxの形式のIPを持つすべてのデバイスはそれを聞きます。

結果はそのようなスクリプトです。



ソフトウェアが整理されたら、ハードウェアを使用します。 ファームウェアでは、出力7、8、9が色管理に使用され、赤、緑、白の色が使用されると想定されています。 次のスキームを組み立てます。



画像



点滅するArduino。 何も動作しません! 修正して、フラッシュして、試してください。 修正して、フラッシュして、試してください。 ファームウェアコードがデバッグされ、必要なことを実行するまで何度も繰り返します。 成功!



画像



写真は、パケットがネットワークを介して送信され、赤と緑に光る要求がある状況を示しています。



より多くの光



プロトタイプには、低電力の5mm LEDが使用されました。 オタクランプが弱い。 しかし、屋外広告用のLEDストリップは必要なものです。 しかし、小さな問題があります。 12 Vがテープに供給され、Ardunoは足元に5 Vしか発行できないと想定されています。

それらはテープに火をつけるのに十分ではありません。 ArduinoがUSBではなく別の電源ユニットから給電されている場合、7.5から12 Vに給電できます。この電圧はArduino自体の電圧レギュレーターを通過してネイティブ5 Vに変わりますが、その前に電圧はVin接点から取得できます。



解決されました。 Vinをテープに適用し、トランジスタを使用して電流の流れをブロック/有効化します。



画像



つけろ! ドラムロール...バーベル! 輝かない! イーサネットシールド、Arduinoは電球で点滅し、テープは静かです。 私は全体のスキームを鳴らしました:それはすべてがうまくいくようです。 しかし、違います。 私は長い間踊りましたが、結果はありませんでした。 構造全体を接続したまま、彼はお茶を作るために去りました。 そして、戻ったときの驚きは何でしたか、白いリボンが輝いているのを見ました。 したがって、デバイスは、IPアドレスが受信され、接続があり、UDPコマンドがまだないことを報告しました。 いいね! 赤をオンにするコマンドを送信します。 ドラムロール...再びバー! 白だったので、残った。



実験を数回繰り返した後、イーサネットシールドに電力が不足していると思われました。 はい、そうです。 外部12V電源に加えてUSBを接続すると、すべてが機能します。



画像



なぜ私が後退して続行することにしたのかを理解しようとする数時間:まあ、USBをオンにします。 ガジェットは「自分用」に固定されており、さらに、ランプを分解せずにマイクロコントローラにアクセスできる抜け穴が残っています。



デバイスを長時間動作させたままにしておくと、Arduinoの電圧レギュレータが適切にウォームアップされていることに気付きました。 指を長く持つことはできません。 私はすべての消防士のために、ホットグルーの助けを借りてランプを24時間動作させたいので、小さなラジエーターをそれに取り付けました



画像



パッキング



このすべての構造は、ケースに配置する必要があります。 これを行うために、私は理解できない柔らかい素材で作られた通常のランプを購入しました。 そこで、ランプを切断しました。ネイティブの詰め物をすべて取り出して、ビンに送ります



画像



ブレッドボードと合わせて、このすべてをランプの中に入れるのは問題でした。 これは信頼できません。 したがって、ブレッドボードから回路全体を回路基板に転送します。 ボードの品質は、Proto Shieldに非常に適しています。 脚をはんだ付けし、トランジスタを取り付け、ワイヤをはんだ付けします。 受け取った支払いを呼び出して、連絡先が必要な場所と不要な場所を確認します。 すべてがうまくいくようです。 デザインをまとめる。 ここにそのようなサンドイッチがあります:



画像



指をクロス、オンにします。 動作します!



ここで、すべての内臓をキューブ内に配置する必要があります。 輝きをより均一にするために、LEDストリップを混乱させてプラスチッククランプで固定し、しわになった半透明のビニール袋をキューブに押し込みました。 蓋には、正方形のピースを使用することにしました

段ボール。 Arduinoは、両面テープを使用して取り付けられます。



画像



慎重にふたを閉じて、ランプの本来の詰め物を保持するために使用される4本のネジで固定します



画像



Team Cityとの統合



これは、CIサーバーとして使用するシステムです。 ここで、必要なイベントで、IPブロードキャストを介して、サーバーがランプが理解できるUDPパケットを送信することを確認する必要があります。 Team City用のJavaプラグインを作成すると便利です。 おそらく最後に書きます。 しかし、今ではないように

APIの学習に時間を費やすために、クイックアンドダーティな方法を使用します。X秒に1回、Team CityレポートのWebページを見て、その状態を理解するスクリプトを作成しましょう。



スクリプトのソースコードは 、ファームウェアの隣にあります。 Hudson、CruiseControlをお持ちの場合、はい、何でも-同様のアプローチを使用できます。



ドレスリハーサル



ランプに親しみやすい雰囲気を作り、Team Cityでシンプルなプロジェクトを作成し、指を組み、すべてをオンにして、完全な満足感でフリーズします。



画像

画像

画像

画像



何が起こって失敗した





問題を解決することが判明しました。プロジェクトの現在の状態を示すランプがあります。



さらに、事物は完全に独立していることが判明し、必要に応じて、交通渋滞のレベル、サイトのパフォーマンス、未読の手紙の存在など、さまざまなことを通知できます。



完全に単純なデバイスを作成することはできませんでした。 ランプから3本のワイヤが突き出ています。 USBは明らかに不要ですが、電源の問題を解決することはできませんでした。 はい、そして食べ物自体、多すぎるかもしれません。 結局のところ、PoE(Power over Ethernet)テクノロジーがあります。 もっと努力すれば、できると思う

ツイストペアパッチコードのみがランプから突き出るようにします。



USB駆動のテーマは私を悩ませます。 おそらく、専門家の一人がこの動作を説明できますか? 私はそれを回避するために私がやろうとしたことを事前に教えます:







これはどれも助けになりませんでした。 Arduino自身が50 mA以下しか消費しないことが知られています。 イーサネットシールド-150 mA; 12 V-45 mAで1本のテープ。 意見はありますか?



そして一般的に、ガジェットはどのように好きですか?



UPD :今、店の電子メールに書いた人が、どうやら彼の返信先を間違って書いたようです-私は彼に答えることはできませんが、彼は次のように書きました:



そして、トランジスタのベースの電流制限抵抗器は忘れられていません??? それらがなければ、arduinoを燃やすことができます...まあ、それらの不在は間違いなく電流消費の増加の原因になりますが、トランジスタのベースを使用すると、ポート脚を地面にほとんど地面に短縮しました。



そして彼は正しいです! そして、私はそれを逃したとすぐにですか? テープ自体に抵抗がある場合、すべては大丈夫ですが、回路のその部分にはないと思いました。 いい人ありがとう!



All Articles