スキップしてメイン コンテンツに移動

コワーキングスペースHaLakeでのシステム化の取り組みまとめ

ニャンパスがコワーキングスペースを初めて、早二年以上が経ちましていくつかのシステムやら、IoTっぽいものを開発してきましたので、一度現時点でまとめたいと思います。

ソフトウェア開発がメインの会社ですので、コワーキングスペースをはじめた当初は、Raspberry Piを使って簡単な実験をやっていた程度でしたが、毎月開催のIoT勉強会をやるようになり、そこで得た知見から、また小学生へのプログラミング教室の毎週の開催からHaLake Kitといったデバイスの開発をはじめ、ソフトウェアに限らないものづくりを割りと盛んに行うようになりました。
今回は、そんな開発したものの中でコワーキングスペース運営に特化したものの紹介です。

Raspberry Piでのレシートプリンター


受付時にレシート発行するシステムです。Raspberry PiからUSBでつながれたプリンターを直接操作して印字しています。
写真にあるように500円ボタン、1000円ボタン、印刷ボタン、リセットボタンがあり、ドロップインのお客さんが2時間利用の場合500円ですので、二人いらっしゃった場合には500円ボタンを2度押して印刷ボタンを押すと二時間利用2名分という内訳で印字されます。
印刷ボタンを押してからレシートが一瞬で吐き出される様子は一見の価値ありです。

ソースコードも公開しています。
https://github.com/nyampass/halake-raspi


staff-ops



HaLakeにアルバイトとしてお手伝いいただいているスタッフとしてお手伝いしてもらっている方用のチェックリスト、タスク管理なものです。やってもらった作業や、コメントがSlackに通知されるようになっており、コワーキングスペースに足りない備品もこのシステムを使って把握できるようにしています。これで少なくなっている備品がリモートで把握できますし、同時にSlack上にはAmazonで購入したメールを流すようにしていますので、すでに購入されていてまだ届いていないのか、あるいは購入漏れがあるかどうかも全員が分かるようになっています。
今回のエントリーの中で唯一ソフトウェアだけのものです。

こちらもソースコードも公開しており、Heroku上で動くことを想定しています。
https://github.com/nyampass/staff-ops

ついでに、ニャンパスとしてIoT機器からのデータ収集を手軽に行うiot-srvというソフトウェアも開発していて、staff-opsと同時期に作った背景から、技術的な要素はNode.jsで動くことやHerokuを前提としている点で共通しています。
https://github.com/nyampass/iot-srv


Staff Dash Button

お客さんがウォーターサーバの水が切れていると分かったら押して貰うスイッチです。ニャンパスのSlack、HaLakeチャネルへ通知が行くようにしています。
水が切れていたらボタンを押さなくても直接スタッフに言うという声も聞かれましたが、僕もたしかにそのとおりだなと思います。完全にネタとして置いている装置です。

HaLake Kitでも使っているESP8266を使っています。
WifiへつながるESP8266はお値段もお手頃でちょっとしたプロトタイプのIoT開発には重宝しますし、何度か参加したハッカソンでも役立ちました。



(開発中)トイレが使用中かどうかがライトでお知らせ

 
新幹線でトイレが使用中かどうかが照明でお知らせしてくれるアレです。BLEの技術を使ったデバイスを作っている中で、実験の一つとして試しています。
BLE経由でライトの制御は安定的に動くところまでは出来ていたのですが、使っていたチップを変更したい諸事情があり、新たなチップにて今まさに開発中です。
基板が完成したらHaLakeKit Linoというオリジナルのモジュールとして、BLEを手軽に開発できるワークショップを今後開催していきます。


番外編

これらの開発以外にも、社員の河野くんが作って、HaLakeに置いてあるタナトスというロボット、マインクラフトや電子工作をテーマにしたプログラミングレッスンのこと、HaLakeKit Linoの詳細についてなどいろいろとネタはありますので、またまとめて行きたと思います、まる

コメント

このブログの人気の投稿

ESP8266で書き込めない時に対処したこと

ESP8266のチップで書き込めなかった問題が起こり、それについての対処を参考になる可方がいるかもということでブログにもメモとして残しておきます。 書き込みで失敗したケースとしては、 スイッチサイエンスさんのESP-WROOM-02ピッチ変換済みモジュール《シンプル版》 へのシリアル通信での書き込みができなかった問題 Over The Air(OTA)の機能を使うコードを、同じくESP-WROOM-02に対して転送するも、更新の途中でクラッシュし、書き込みが失敗するという問題 の二つです。 OTAまで使って書き込もうとしている背景は、ニャンパスとして Robip というプログラミング学習環境を作っていて、そのツールの中でWi-Fi経由での書き込み機能を対応することでスマートフォン、タブレットなどでのビジュアルプログラミングしたものが、OTA経由で電子工作のプログラミングができるようという機能があり、いくつかのESP8266を積んだモジュールへのサポートを増やそうとしたところ(ようはRobipとしての対応デバイスを広げたかった)上記の書き込みできない問題にぶつかりました。 Facebookのこちらに書いたことの詳細版です。 ESP-WROOM-02への書き込み出来ない問題 もともと、HaLake KitというコワーキングスペースHaLakeオリジナル基板は、ESP8266を積んでいますので、この書き込みツールとしてClojureで書いた robip-tool というのを用意していました。 このツールであればHaLake Kitには書き込めていたのですが、ESP-WROOM-02ピッチ変換済みモジュール《シンプル版》ですと最初の書き込みの段階で失敗することが分かりました。 そこで世界中で人気のESP8266ですので、色んなバージョンの書き込みツールがありまして、書き込みに成功するツールを探す旅が始まりました。 その際には、シンプル版だけでなく、HaLake Kit、ESPr Developer(ESP-WROOM-02開発ボード)、ESP-WROOM-02ピッチ変換済みモジュール《フル版》でも試して、全てで動くツールを検証しました。 途中、Go言語で書きなおしてみたりいろいろテストもしたのですが、結果的に全て

ClojureScriptとBLE

2017年Clojure Advent Calendar 15日目の記事として書きました。 今年、ニャンパスとして、またプライベートでいろいろとBLEを扱うコードをClojureScriptで書きましたので、まとめてみます。 使用したデバイスは、micro:bitです。秋葉原や通販等で手に入り、BLE、25個のLED、加速度センサーがついている学習用のボードです。ブラウザ上でビジュアルプログラミングでの開発ができたりと面白いので、年末年始に遊んでみてください。 ClojureScriptでの環境の作り方から始まって、micro:bitとPCとの接続、リモートでのLチカを試すというIoTなClojureScriptの内容となってます。 1. ClojureScriptで、BLEな環境を作る Node.js、npm、Leiningenを入れておいてください。プロジェクトを作ります。   $ lein new figwheel-node ble figwheel-nodeテンプレートを使い、できたファイルはこんな感じです。 ./project.clj ./README.md ./package.json ./.gitignore ./src ./src/ble ./src/ble/core.cljs ./dev ./dev/user.clj 今回、PC側をBLEのセントラルとして振る舞わせ、micro:bitをペリフェラルとして操作しますので、そのためセントラル側のプログラムとしてnobleというライブラリを使います。 OS毎に依存するものが違いますので、サイトで事前に確認しておいたほうが良いです。    https://github.com/sandeepmistry/noble ※nobleはMac、Linux、Windows、FreeBSDをサポートしており、 僕自身今年nobleを使ったコードをClojureScriptを使って、Windos、Mac、Linuxそれぞれで動かしていて動作は安定していました。 では、nobleを以下のコマンドを実行しておきます。   $ npm install noble ※普段はlein-npm等を使

ClojureでCompojureを使わずにサーブレットを書く方法

Clojureでgen-class、proxyを使ってみようと思い、試しにサーブレットを書くとどうなるかを試してみました。 コンパイルにLeiningenを使うためプロジェクトを作ります。 lein new sample-servlet まずはsrc/sample_servlet/servlet.cljを書いてみます。 (ns sample_servlet.servlet (:gen-class :extends javax.servlet.http.HttpServlet)) (defn -servlet [this request response] (.setContentType response "text/html; charset=UTF-8") (let [out (.getWriter response)] (.. out (println "<html><body>hello world</body></html>")))) (defn -doGet [this request response] (-servlet this request response)) 依存関係とクラスファイル生成のオプションを与えたproject.cljファイルを作りました。 (defproject sample-servlet "1.0.0-SNAPSHOT" :description "FIXME: write" :dependencies [[org.clojure/clojure "1.1.0"] [org.clojure/clojure-contrib "1.1.0"] [javax.servlet/servlet-api "2.5"] ] :namespaces [sample_servlet.servlet]) 必要なライブラリを取得しコンパイル。 lein deps lein compile 無事生成されたことが分かります。 % ls -lr