Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Arduino UNO系でも動くLISP実装 uLISP その1:説明と導入

Arduino UNO系でも動く軽いLISP実装として、 uLISPというのがあります。

www.ulisp.com


暫定的目標として、これでロボットアームを動かせるようにしつつ
obnizとのシリアル通信連動で遠隔制御できるようにまで持っていきたいと思います。

実際のところ

なんと……Arduinoのソフトウェアに上にuLisp実行環境を組むという超絶ストロングスタイル……!!

$ git clone https://github.com/technoblogy/ulisp
$ cd ulisp

そこにある"ulisp.ino"をArduinoに書き込みます。
するとシリアルポートにREPLが。
この数値"314"は使えるLISPセルです。

uLisp 2.7 
314> 

あとは……Lチカしてみましょうか。

314> (defun b (x) (pinmode 13 t) (digitalwrite 13 x) (delay 1000) (b (not x)))
b

283> (b t)

……ただ、これだとループが切れないので注意。
離脱するには"~"を入力してください。
実行中のスクリプトを中断できます。

【読書メモ】独学術

ド直球なタイトルが目を引く、勉強術エッセイです。
何か学術的裏付けがある主張ではなく、あくまで著者の経験から導き出された話なので注意。

内容を抜粋すると

  • 辞書ひけ
  • 本のカネをケチるな
  • 物事の歴史的背景を知っておけ
  • 語学も難しい本もいっぺん俯瞰

このように、「上達の法則」に通じるところがあります。
shuzo-kino.hateblo.jp


作者の 白取 春彦 氏は宗教学、それもキリスト教が専門らしく本誌中でも何度か聖書がわからないと西欧の文化背景を知る事ができない旨を主張しています。
アメリカ独立宣言も聖書の影響をうけてるとか、よく聞きますしね。

ただ、前述の専門で凝り固まってるせいなのか、あまりに西洋かぶれなのがモニョるところが散見されました。
とくに「バングラデシュは貧しいから文化がない!」とは流石に頭のネジが外れてるとしか……。
バングラデシュには南アジア文化が根付いてますし、世界遺産にもなったイスラーム建築とか見所はたくさんあるんですけどね……。

【読書メモ】JKオーナー、マネジメントを学ぶ! 「余命3か月のフランス料理店」を再生させた26の経営レシピ

よくある、経営理論系読みものです。
文体も組版も軽めな本ですが、財務諸表から経営戦略、ポジショニングの話まで幅広く扱っています。

比較的新しめな内容である事もあり、話題がデフレ……もとい地獄の値下げ対策に焦点があってるのが印象的でした。
曰く、高級系が価格帯を落とした結果、既存の他業種と喰い合いが発生してしまっているのだとか……。

人材面についても、アルバイト偏重をあらため正社員化と待遇改善による人員の質による付加価値強化を挙げていたりします。
これはある程度育てたら抜けたという、昔ながらの中小企業悲哀を軽視しているように感じましたが……。

つよつよIoTボードobnizがヤバい その11:Canvasの内容をレンダリングする

HTML5で絵を書いたりするときに有用なCanvasタグの内容をレンダリングする関数も存在しています。

実際のところ

公式ボードを使う場合、OLEDは「白ドット 128*64」とあるので、これを超えない範囲でやります。

ブラウザと公式ボードにそれぞれ、同じコンテンツ(フォント指定文字列と満たす)

<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
    <script src="https://unpkg.com/obniz@2.2.0/obniz.js" crossorigin="anonymous"></script>
  </head>
  <body>

    <div id="obniz-debug"></div>
    <h1>obniz instant HTML</h1>
    <canvas id="canvas" width="128" height="64"></canvas>


    <script>
      var obniz = new Obniz("YOURID")
        const ctx_obniz = $("#canvas")[0].getContext('2d');

        ctx_obniz.fillStyle = "black";
        ctx_obniz.fillRect (0, 0, 128, 64);
        ctx_obniz.fillStyle = "white";
        ctx_obniz.fillRect(64, 44, 128, 64);
        ctx_obniz.font = "30px Avenir";
        ctx_obniz.fillText('Avenir', 0, 40);
        
      
      obniz.onconnect = async function () {
        obniz.display.draw(ctx_obniz);
      }
    </script>
  </body>
</html>

……我ながら、美的センスの欠片もない醜いコードですね(白目

実際レンダリングすると、こんな感じ。

通信環境さえ保証されてれば、非エンジニアが現場に出向いても同じ画面で作業させる事ができますね。
……実質、簡易TeamViewerとして活用できるのでは?

参考もと

obniz.io
obniz.io

つよつよIoTボードobnizがヤバい その10:IOの駆動電圧を切り替える

実際のところ

drive関数を使う事で駆動電圧を切りかえる事ができます。
3Vと5Vがあり、前者なら低電圧系のセンサーも使えますね。

obniz.io1.drive("3v");

obniz.io2.drive("5v");

参考もと

obniz.io

つよつよIoTボードobnizがヤバい その9:I2Cの受信子機として振る舞う

残念ながら、受信専用のようで書き込みは出来ません。
上部に通信したい場合はUARTを使うのが良さそう。

実際のところ

親機はRasPiでやります。
shuzo-kino.hateblo.jp

子機としての設定

いまかいてまs

参考もと

obniz.io

つよつよIoTボードobnizがヤバい その8:IOからコールバックでうけとる

実際のところ

IO1番をコールバックで受け取る

  obniz.io1.input(function(value){
    console.log("value is " + value);
  });

switchのときのサンプルを書き直すとこんな感じに。
ただ、連続して押すと具合がよくない事もあります。

<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
    <script src="https://unpkg.com/obniz@2.2.0/obniz.js" crossorigin="anonymous"></script>
  </head>
  <body>

    <div id="obniz-debug"></div>
    <h1>obniz instant HTML</h1>

    <script>
      var obniz = new Obniz(YOUR_ID);
      obniz.onconnect = async function () {

        obniz.display.clear();
        obniz.display.print("Hello World");

        // ボタン
        obniz.switch.onchange = function(value){
          obniz.display.clear();
          obniz.display.print(value);
        };
        
      }
    </script>
  </body>
</html>

参考もと

obniz.io