以前紹介した、5コ950円で買える、安価でIchigoJam BASICだけでも使える超音波センサー「HC-SR04」。 他デバイスとの関係で、どうしてもBTNを使いたいとご要望あり。


できました!IchigoSodaにつないでIoT化していますが、IchigoJam、IchigoDakeでもOKです!

BTNはIchigoJam付属のボタンとSLEEPからの復帰のため外部でプルアップ抵抗をつなげていて、ANA(0)としてアナログ入力としても使えます。 つまり、CPU内部の設定としてはアナログになっているので前回紹介したマシン語で読み出そうとしてもうまくいきません。


BTNを割り当てているPIO1_4、LPC1114のデータシートの IOCON_PIO1_4 (アドレス#40044094) を見ると設定方法が書いてあります。 一度、マシン語を使ってどういう設定になっているか読み出してみましょう。

R0=[@IOCON_PIO1_4]L R0=[R0]L RET @IOCON_PIO1_4 DATA L #40044094

asm15でアセンブルして、読みだした値を8桁の2進法で表示

POKE#700,1,72,0,104,112,71,0,0,148,64,4,64 OK ?BIN$(USR(#700,0),8) 01000001

2:0 つまり最下位の0bit目から2bit目の3bitを使ったFUNCは1、次の2bitのMODEは0(プルアップなどなし)、次の1bitのHYSは0(無効)、6bit目はReservedとして予約されていて1を設定することになっていて、7bit目ADMODEが0でアナログ入力モードとなっています。

これをADMODE:デジタル入力+FUNC:PIO1_4と、`11000000 に一時的に変更する作戦でいきます。前回のカウントプログラムの前後にこの設定を足します。

PIO1のベースアドレスは #50010000、BTNは、PIO1_4の場所なので
?"#5001";HEX$(1<<(4+2),4) → #50010040 を@INに設定します。

'BTN(PIO1_4) <- digital R1=`11000000 R3=[@IOCON_PIO1_4]L [R3]L=R1 'count check R0=0 R1=[@IN]L @LOOP R2=[R1]L R0=R0+1 R2-0 IF !0 GOTO @LOOP R0=R0>>9 'BTN(PIO1_4) <- analog R1=`01000001 [R3]L=R1 RET @IOCON_PIO1_4 DATA L #40044094 @IN DATA L #50010040 'BTN=PIO1_4

アセンブルして、BASICのプログラムと組み合わせて、できあがり!

10 POKE#700,192,33,6,75,25,96,0,32,5,73,10,104,64,28,0,42,251,209,64,10,65,33,25,96,112,71,0,0,148,64,4,64,64,0,1,80 20 OUT1,1:OUT1,0:?USR(#700,0) 30 WAIT 5:GOTO 20

マシン語でカウントした値、R0をBASICに返す前に9ビット右シフト、つまり512分の1にしています。マシン語のカウントだと速すぎて大きな値になってしまうからですが、ここをいじると精度アップが見込めます。 ただ、IchigoJamでは1秒間に1.5万回くらい画面表示用の割り込みが発生するので、高い精度で計測するには割り込みを一時的に止める必要があります。

CPSID R0=0 R1=[@IN]L @LOOP R2=[R1]L R0=R0+1 R2-0 IF !0 GOTO @LOOP R0=R0>>5 CPSIE RET @IN DATA L #50001000 'IN1=PIO0_10

割り込みの一時停止は CPSID、最下位は CPSIE です。戻し忘れると何も操作できなくなってしまいます。下記、CPSIDした後リターンする危険なプログラム、SAVEした後、お試しください。

LET[0],#B672,#4770:?USR(#800,0)

完成した、超音波センサー、TrigをIN1に接続し、精度16倍バージョンがこちら!

10 POKE#700,114,182,0,32,3,73,10,104,64,28,0,42,251,209,64,9,98,182,112,71,0,16,0,80 20 OUT1,1:OUT1,0:A=USR(#700,0):?A 25 LED A<300 30 WAIT 5:GOTO 20

一定距離から近づくとLEDがついてお知らせ、リレー経由でスゴイ照明と組み合わせると防犯ライトにもなりますね!

5 B=0 26 IF B=0 AND A<300 B=1:N=N+1:IOT.OUT N:?"IOT!";N:WAIT30 27 IF B=1 AND A>=300 B=0

IchigoSodaを使って通ったらIOT.OUTでカウントを送るように改造も簡単です!
福井県で始まった「混雑状況オープンデータ」との連携も便利そう。


Let's IoT with IchigoJam x various sensors!

links
- 200円 超音波距離センサー HC-SR04 を IchigoJam で使う方法 - Armマシン語で時間を測ろう
- 今週末は越前がにロボコン! IchigoJamで超音波センサーをIN1とは違うポートで使う方法 BASIC編 マシン語編

初心者にはオススメできないC言語ですが、多くの高専の授業で登場するC言語

#include <stdio.h> int main() { printf("Hello World!\n"); return 0; }

このC言語のプログラムを実行すると

Hello World!

と出ます。これで感激できるのはC言語を作った人と、環境構築に苦労した人くらい。大抵の人は「で?」と思うだけでしょう。 なぜ # で始まる? <stdio.h> はHTMLのタグとは違う? studio のつづり違い?など1行目から分からないことだらけです。

こちら、その謎に本質から迫るため開発した、x64版の超シンプルマシン語標準入出力ライブラリ stdio.asm を Windows 10で動かした様子。Mac/Linux/FreeBSDでも同様に動きます。

今日の記事はC言語を少しやったけど、なんだかスッキリしない人、現代PCの主力CPU、Intel/AMDのx86系x64マシン語を使ったOSの深い話が気になる人向けです。 まずは楽しくプログラミングでゲームを作ってみたい人や、マシン語の基本は、シンプル&コンパクトなパソコン、IchigoJamからスタートするのがオススメです。(IchigoJam入門動画はじめてのマシン語

C言語プログラミング、本当のはじめのいっぽはこちらです。

int main() { return 1 + 1; }

これを test1.c と保存し、コンパイルし、実行し、実行結果を表示すると(for macOS/Linux)

gcc test1.c ./a.out echo $? 2

1 + 1 という人間らしい言葉で、コンピューターに計算させることに成功!

細かく解説すると・・・。 こちら、整数(int)を返すmainと名付けた関数(数学の関数と似たもの)を作り、中身に「1 + 1」を返して(return)と記述したC言語のプログラムです。 mainという名前は特別で、プログラム起動時に最初に呼び出されます。 「1 + 1 」という人にわかりやすい言葉を、コンピューターが分かる言葉、マシン語へ変換してくれるのがC言語のコンパイラというツールです。 gccというコンパイラは、特に何も指定しないと a.out という実行ファイルができます。それを、実行。 プログラムが実行した結果をみるコマンド(echo $?)を使って、コンピューターが計算した結果「2」を得ることができた。というわけです。

ゲームのキャラクターを表示したい、コントローラー入力を使いたい、音を慣らしたい、いろいろ欲が出てきます。 そこで登場するのがライブラリ。コンピューターの仕様を隅から隅まで調べなくても、誰かが作ってくれた便利な部品を使うことで楽できます!

そんなライブラリの代表格が stdio.h(スタンダードI/Oの略) で定義されている標準ライブラリというものです。 基本的な文字の表示(output)と入力(input)のための関数が揃っています。 冒頭に登場した、printfという関数もそのひとつ。

int main() { printf("hello!\n"); return 0; }

上記のようにプログラムを変更してコンパイルすると、printfって何?とエラーになります。

printfを事前に定義する必要があります。stdio.h というファイルに定義があります。#include は指定したファイルを埋め込んでくれます。 ファイル stdio.h はどこにあるのでしょう?コンパイラが含めるために使うディレクトリが決まっていてその中のを使ってというのが、「<」と「>」で囲う意味でした。 その場にある自分で作ったファイルを含めるときは、ダブルクォートで囲みます。 HTML,CSS,BASIC,C,JavaScript,Pythonなど、コンピューター言語毎に、記号の意味は変わります。

文字の表示やサウンド出力などの手順は、Windows/macOS/LinuxなどのOS毎に違います。 C言語のコンパイラはCPUの違いを吸収してマシン語を生成してくれますが、手順の違いを吸収するのはライブラリの役目。

例えば、Macで文字を出力するには、レジスタrsiに出力したい文字列の先頭アドレスを、レジスタrdxに長さを、rdiに1を、raxに0x2000004をそれぞれ設定して、システムコール(syscall)を呼ぶことで、OSが文字を表示してくれます。(stdio_mac64.asm src on GitHub、cmd: nasm -f macho64 hello.asm -DMAC64; ld -lSystem hello.o -o hello )

mov rdi, 1 ; fd = stdout mov rax, 0x2000004 ; syscall write syscall

CentOS, Ubuntu, Debian, OpenSuSE, Arch Lniux, Fedoraなど、多くのLinuxではレジスタraxに設定するシステムコール番号を変えるだけでOKです。(stdio_linux64.asm src on GitHub、cmd: nasm -f elf64 hello.asm -DLINUX64; ld -e _main hello.o -o hello )

mov rdi, 1 ; fd = stdout mov rax, 1 ; syscall write syscall

FreeBSDでは他のLinuxと異なります。macOSはBSD系の子孫、この値に 0x2000000 数を足したものです。(stdio_bsd64.asm src on GitHub、cmd: nasm -f elf64 hello.asm -DBSD64; ld -m elf_x86_64_fbsd -e _main hello.o -o hello )

mov rdi, 1 ; fd = stdout mov rax, 4 ; syscall write syscall

Windowsでは直接システムコールを呼んではいけないことになっていて、dll(ダイナミックリンクライブラリ)を経由しての呼び出しとなります。stdio_stdout の初期化が必要で、レジスタの使い方や、スタックの使い方も違います。(stdio_win64.asm src on GitHub、cmd: nasm.exe -fwin64 hello.asm -DWIN64& link.exe /entry:_main /subsystem:console hello.obj kernel32.lib )

mov r8, rdx ; len mov rdx, rsi ; buffer mov rcx, [rel stdio_stdout] mov r9, stdio_bytesWritten push qword 0 call WriteFile

このようにOSによってそれぞれ使い方は異なりますが、名前と使い方に揃えれば、以後気にしなくてよくなります。stdio.asm で、環境によって使うライブラリを切り替えるようにしておきます。

%ifdef WIN64 %include "stdio_win64.asm" %elifdef MAC64 %include "stdio_mac64.asm" %elifdef LINUX64 %include "stdio_linux64.asm" %elifdef BSD64 %include "stdio_bsd64.asm" %endif

こうして準備をしておき、stdio.asm を include すれば、どのOSでも動くマシン語でプログラム「Hello World!」が、このようにシンプルに書けます。NASMでのファイルへの埋め込みのincludeは#ではなく%。 いろんな環境での動作確認はConoHaのVPSを使うと1環境1時間1円〜と、とても手軽です。

%include "stdio.asm" global _main section .rodata MESSAGE db "Hello World!", 0x0d, 0x0a LEN_MESSAGE equ $-MESSAGE section .text _main: call stdio_init mov rsi, MESSAGE mov rdx, LEN_MESSAGE call stdio_write mov rdi, 0 call stdio_exit ret

開発効率、速度、汎用性の向上や、特殊な用途への特化するためなど、さまざまなプログラミング言語が誕生し、使われたり、廃れたりしていますが、結局動いているのはこれらマシン語です。 基本を抑えておけば、余計な手間をかけることなく、楽しく楽に開発できてますますプログラミングが楽しくなります。

理解を深めるには、実際にやってみるのが一番です!Windows/Mac/Linux/FreeBSD、それぞれ環境に合わせた c-*.sh/bat、c-*-test.sh/bat を使って、実際に動かしてみましょう。(src on GitHub

開発に必要なツールを設定しましょう。Windowsでは「Visual Studio C++ 2019 コミュニティ」、Macでは「Xcode」がそれぞれ無料で提供されています。 アセンブリ言語をマシン語化してくれるツール、アセンブラ「NASM」もオープンソース、無料です。

Visual Studio C++ 2019 コミュニティ、右側赤枠で囲んだ2つ、ビルドツールとSDKがあれば、ひとまず今回の開発は可能です。セットアップ後、コマンドプロンプトで hello-x64asm のディレクトへ移動し init-win.bat を動かし、開発ツールとNASMにPATHを通して、レッツトライ!

stdio.asm は、stdio.h が持つ機能の極一部。自分なりのライブラリや、プログラミング言語づくりにチャレンジするのもおもしろいですよ!

links
- taisukef/hello-x64asm: the first step of x64 64bit assembly programming on Windows/macOS/Linux
- C言語開発者「C言語は初心者にはお勧めできない」 エントリーにオススメBASICは、世界初のクラウド対応言語だった! IoTで起業家甲子園目指す、長岡高専チームメンタリング
- プログラミング言語は何から学ぶべきか? ロボットプログラミングゲームをIchigoJamでプログラミング! C言語の教科書「Springs of C」より
- 高専でなぜC言語を学ぶのか? IchigoJamマシン語生成プログラム c4ij で作る、C言語版かわくだり
- IchigoJamからのステップアップ - IchigoJam BASIC / Python3 / JavaScript / Java / C言語 対照表
- ハンドアセンブルで高速計算! RISC-V、RV32ICエミュレーターのC言語実装
- マシン語対応 IchigoJam web、気軽にハンドアセンブルして遊べます!
- OpenCL/C言語 GPUプログラミングはじめのいっぽ on Mac
- わずか16KB! WebAssemblyで動くミニC言語オフラインコンパイラ&インタプリタ webci0
- 深いプログラミング言語学習に最適! 512行のC言語コンパイラ ci0 を使ってみました
- 地味なC言語がなぜ楽しいのか?

Web標準、W3C BROWSERS AND ROBOTICS コミュニティグループで議論され、仕様策定中のWebGPIOを使って、PCに接続したIchigoJamをコントロールしてみました。 まずは、JavaScriptで、エルチカ!(USBシリアル付き、IchigoKamuy with IchigoJam BASIC)

実装は、こちら (src on GitHub)

import navigator from './WebGPIO.mjs' const sleep = async msec => new Promise(resolve => setTimeout(resolve, msec)) const main = async () => { const gpio = await navigator.requestGPIOAccess() const port = gpio.ports.get('LED') await port.export('out') // export (activate) the port. for (;;) { port.write(1) await sleep(500) port.write(0) await sleep(500) } } main()

GitHubからソースをcloneするか、ダウンロードして

npm i

で、シリアル通信に必要なパッケージをセットアップ。USBシリアルポートを設定する '.env' ファイルを作成。

SERIAL_DRIVER=/dev/tty.SLAB_USBtoUART

あとは動かすだけ!

node led4.mjs

エルチカ部分、sleepメソッドやasync/awaitを使わず、このようにも記述可能です。

let v = 1 setInterval(function () { port.write(v) v = 1 - v }, 500)

まだ出力のみです。入力と、onchangeを使った入力監視を実装すれば、現時点でのWebGPIOとしては完了。

WebGPIOとして拡張したい3点
- アナログ出力(PWM) - サーボの制御、LEDの明るさ制御、簡易的なサウンド出力に使える
- アナログ入力(ANA) - アナログセンサーで距離や明るさ、温度などを計測できる
- プルアップ・プルダウンの設定 - 3値出力として使うなど

ちなみに、JavaScriptが使えるIchigoJam用OS、IchigoLatteでのエルチカはこちら

while (1) { led(1); sleep(500); led(0); sleep(500); }

何の宣言も必要なく、シリアルで転送したり、直接キーボードをつないで打ち込めばOK!
100円CPUには、Promiseの実装はちょっとヘビーだし過剰なので、WebGPIO light というのもあり?

links
- CHIRIMEN Open Hardware
- JavaScript Robotics Advent Calendar 2016 13日目 WebGPIOのPolyfillを実装してみて
- ハート基板 x IchigoKamuy で感染病床残数IoT by シリアルで制御するIchigoJam、IchigoSerial for Node.js

支え合い、時に競争しながら、みんなで創る未来。世の中にどのように貢献したいか?人によって夢はさまざま。貢献するために足りないスキルを習得すること、それが勉強、または、学習。

義務教育課程の教科は、学習する力を身につけるためのいわばチュートリアル。 個別最適化された学び「GIGAスクール構想」が実現すれば、こどもたちがより実践的な課題に目を向け、それぞれの個性と共により深いスキル習得につながるはず。

2006年、カーンアカデミーによって提唱された動画教材による反転授業とスキルツリー。わからないところは何度も見直せる動画教材がすべて揃えば理想的ですが、福井県による「ふくいわくわく授業」でも100ちょっと。小中全学年全教科に対してはまだまだ不足。

そこで活かしたい民間力。福井県教育総合研究所で紹介されていた「とある男が授業をしてみた」を見てみると小中高校生向けの動画が、なんと計2,000以上!


時間割ガチャ - とある男が授業をしてみたバージョン
チャンネル登録数は90万!教員免許も持っている教えるプロフェッショナル。(【とある男が授業をしてみた】葉一(はいち)って誰?本名/学歴/いじめ/どんなYouTuberなの? | LogTube|国内最大級のyoutuber(ユーチューバー)ニュースメディア


オンラインで学ぼう
教材リストオープンデータとして、2115件、登録したので、このように検索も可能!

2115件のコンテンツをどう登録したか?もちろん、プログラミングです!
こちら YouTube Data API を使って、プレイリストから全動画のURL、タイトル、再生時間を取得し、科目、学年で分類するJavaScriptのプログラムの一部。

let data = await fetchYouTubePlaylists(listid) const lists = [] for (;;) { for (const d of data.items) { const list = await fetchVideoDataFromPlaylist(d.id) list.forEach(i => { i.ptitle = d.snippet.title i.playlistId = d.id }) lists.push(list) } saveCSV(path, lists.flat()) if (!data.nextPageToken) { break } data = await fetchYouTubePlaylists(listid, data.nextPageToken) }

基本は簡単、やりたいことを、順に書くだけ! (全文、src on GitHub)

まだ足りない動画教材。誰もが無料でスマホひとつで始められます。動画タイトルに、例えば【】などを使って、対象の学年と科目が分かるように設定してもらえれば、簡単に自動的に整理されたオープンデータとして活用可能です!(登録はこちら
例)「【小学3年 算数】分数のたしざん」「【小学6年 理科】電気の性質とその利用」
松田さんの「マイクラでまなぶシリーズ」も登録!


IchigoJam 6周年イベントに続く第二弾、Hana道場 x PCN仙台 で開催された、オンラインイベント、プログラミング大喜利で、新中学1年生がお題「めがね(めがねのまちさばえ)」に対してプログラミングした「ニュートンのゆりかご」めがねバージョン。発想と実装力がステキ!

テーマに対して、自分の持てる力を活かして、どのようにアウトプットするか!?
実践力が楽しく問われる、それが、プログラミング大喜利!

プログラミングは、ものづくりの一種。でも、あらゆるものがネットにつながるIoT時代、ソフトウェアづくり(=プログラミング)に対する比重は大きくなるばかり。 いろんな科目での学び、その他の学び、いろんなものを使って、自分だけのアウトプットを創って、発表していきましょう!

臨時休館中の福井県内施設。現在、空いているかどうかを、ひと目で確認できたらうれしいとのことで、プロトタイピング!

福井県施設ダッシュボード
混雑状況フラグもあれば、空いているところを狙っていくこともできますね。データが溜まれば混雑予測につなげることも可能。IoTで自動連携もしたいですね!(参考、来場者IoTカウンター


今回の目玉は「休日の翌日」や「第二月曜日」などの表記への対応。 日本語をコンピューターに分かるように翻訳する、JavaScriptのクラスライブラリ dtcheckjp.mjs を作りました。 休日は祝日を含むので、政府オープンデータ「国民の祝日」を使っています。 まだまだ足りない表記がありますが、どんどん要望いただいたり、オープンソースなのでプルリク(修正要望)もらって、改善予定です!

チェック例

const dtcheck = await (new DateTimeCheckerJPl()).init() console.log(dtcheck.checkTime('8時〜9時')) console.log(dtcheck.checkDate('4月20日〜5月1日')) console.log(dtcheck.checkDate('祝日'))

お店の営業時間や、ゴミ捨てなどにも応用できます!

テレビやキーボードが無くても使える、USBシリアル付きIchigoJam互換機、IchigoKamuyと同じく北海道生まれのハート基板で、日本の感染病床の推定残数を残りライフ的に表示させてみました。
厚生労働省からPDFで発表される、1つ星みなしオープンデータをJSON-API化したものを活用。プログラムはとてもシンプル!(src on GitHub、2020-05-12 js→mjs

const ij = require('./ichigojam.js') const fetch = require('node-fetch') const main = async function() { ij.command('CLV:WS.LED20') const url = 'https://app.sabae.cc/api/covid19japan_summary.json' const data = await (await fetch(url)).json() const ratio = 1 - data.ncurrentpatients / data.nbedforinfection console.log('現在患者数', data.ncurrentpatients, '感染病床数', data.nbedforinfection, '空き病床数(推測)', ratio) const nr = Math.floor(ratio * 20) ij.command(`FORI=0TO${nr}:[I*3+1]=30:NEXT:WS.LED20`) } main()

パソコンとIchigoJamでつくる、かんたんIoT。JavaScript on Node.js でチャレンジ!

IchigoKamuyやIchigoJamとUSBシリアルと、パソコンを使ったちょっと高度なIchigoJam入門。Node.js がまだの方、セットアップからどうぞ!
はじめてのウェブサービス、3分でわかるJavaScriptでつくる「チャット」の流れとチュートリアル Node.js編

USBシリアルのドライバの設定が終わったら、Node.jsから使えるように「serialport」モジュールをインストール。(参考、GitHubからプログラムをダウンロード!)

npm i serialport

まずはコンソールからIchigoJamを使ってみましょう!(console.mjs

const driver = '/dev/tty.SLAB_USBtoUART' const SerialPort = require('serialport') const port = new SerialPort(driver, { baudRate: 115200 }) const parser = new SerialPort.parsers.Readline port.pipe(parser) parser.on('data', console.log) const reader = require('readline').createInterface({ input: process.stdin }) reader.on('line', function (line) { port.write(Buffer.from(line + '\n')) })

driver には、自分の環境でのUSBシリアル接続先を設定しましょう(Windowosの場合は、COM8 など)

node console.js LED1 OK

シンプルなIchigoJamとして使えますね!

JavaScriptのプログラムで制御してみましょう!

port.write(Buffer.from('LED1\n')) setTimeout(function() { port.write(Buffer.from('LED0\n')) }, 1000)

LED1でつけて、setTimeoutを使って1秒後に消します。(led1.mjs

Promiseとawaitを使うと、分かりやすく書けます。(led2.mjs

const main = async function() { command('LED1') await sleep(1000) command('LED0') } main()

毎回設定などをプログラムで書くのも面倒なので、モジュール化するとぐっとシンプルに!(led3.mjs

const ij = require('./ichigojam.js') const main = async function() { ij.command('LED1') await ij.sleep(1000) ij.command('LED0') } main()

ハート基板や、WS2812Bを接続して、WS.LEDコマンドを使ってフルカラーLEDの制御!(wsled1.mjs

const ij = require('./ichigojam.js') const main = async function() { ij.command('[1]=30:WS.LED 20') await ij.sleep(1000) ij.command('CLV:WS.LED 20') } main()


1つ、赤に光らせることに成功!アニメーションする(wsled2.mjs)もどうぞ!

IchigoJamでも新型コロナウイルス対策!厚生労働省オープンデータのJSON-APIを使って、ハート基板を制御したものが、今回の作品でした!(wsled3.mjs


パソコンとつないで、光らせ方は自由自在!
どんなデータで、どう動かす?いいものができて、ずっと動かしたくなったらパソコン不要なIoT、MixJuice x IchigoJam や IchigoSoda がオススメです。


特別講演「100円で50MIPS!?こどもパソコンIchigoJam x GPU/VR/5G時代のオープンデータ、その心は?」 | キタゴエ
IchigoKamuyもハート基板も北海道産!Kita-Tech 2019のときの講演が記事に!

北海道と言えば、有志により東京都版から派生した「新型コロナ対策サイト」がいち早く立ち上がった、熱い場所!

COVID-19 JAPAN - 新型コロナウイルス対策ダッシュボード」を、現在患者数 / 感染症病床数 で、使用率目安を表示するように更新しました。

新型コロナウイルス感染症対策専門家会議の見解等(新型コロナウイルス感染症)|厚生労働省
厚生労働省からの対策指針。感染症病床がまずは優先と記述されています。足りなくなった場合への備えも大事ですが、まずはこの防衛ラインを意識して、地域で抑え込むことが大事!

links
- IchigoKamuyはんだづけ一人称視点動画 - パソコンに直結して楽しむIchigoJamでエルチカロボを作るまで
- IchigoJamでパソコンとUSBシリアル通信。Node.jsを使うとキーボードとモニタいらず – しずかなかずし

盛り上がったオープンデータデイハッカソンシンプル版VR版に続き、フィジカル版も作りたい!小中学生でも気軽に参加できるようにIchigoJam用のAPIを作りました。 単体ではネットにつながらないIchigoJam、ネットワークボード「MixJuice(¥2,750)」を使います。

IchigoJamの上にMixJuiceを挿し込み、電源をいれ、いろいろ表示が落ち着いたあと、一度、エンター。MJ APC コマンドで、無線LANのアクセスポイントに接続しましょう。

?"MJ APC SSIDXXXX PASSWORDXXXX 'WiFi connected: 192.168.xx.xx 'OK

WiFi connected と出れば接続OK!次の起動時からは自動的につながります。


APIによる取得は、MJ GET コマンドを使用します。(取得ファイル名は小文字の必要あり、新しいMixJucieなら MJ GETS でもOK)

?"MJ GET app.sabae.cc/api/covid19tokyo.txt 7 n_inspections 1068 n_patients 58 n_light 29 n_heavy 8 n_exit 20 n_death 1 s_lastUpdate 2020/03/07 8:00

いろいろエラーがでますが、こんな感じのデータが取得できればOK!(出展、東京都 新型コロナウイルス感染症対策サイト / Tokyo COVID-19 Task Force websitedata.json を加工。検査実施人数、陽性患者数、軽症・中等症数、重症数、退院数、死亡数の順。jsonでも取得可能)

最初の数値はデータの数、それ以降、データの名前とデータのセットが数分続きます。これを配列に保存するプログラムを作ったりして、活用しましょう!


10 ?"MJ GET app.sabae.cc/api/covid19tokyo.txt 20 INPUT N 30 FOR I=0 TO N-1 40 INPUT S 50 INPUT [I] 60 NEXT 70 'test 80 FOR I=0 TO N-1:?[I]:NEXT


画面に大きく表示したり、サーボを動かしてインジケーターを作ったり、WS2812Bで電光掲示板を作成するのもありですね!

Let's create something against COVID-19!

社会をアップデートするIoT、企業向け研修として活躍するIchigoJam!
はじめてのIoTプログラミング with IchigoJam x sakura.io powered by Hana道場。

さくらインターネット版IchigoJam、IchigoSodaを使った、プログラミング未経験者の大人向けのIoT社員研修。


1時間半で、プログラミングと電子工作の基本から、IoTプログラミングまでぎゅっと体験!


光センサーをブレッドボードに挿して作って、暗くなったら通知するプログラム、3行!


あっという間にスマホとつながる、IchigoJamのかんたんIoT!


盗られたくないプリンの脇に、光センサーを設置しておきましょう。忍び寄る手を検出したら、スマホに通知!即座にボタンを押すといろいろな音を鳴らして、警告しちゃおう!


IoTプログラミング はじめのいっぽ with IchigoJam x sakura.io (PDF, key, pptx)」

links
- IchigoJamでIoTプログラミング体験!出張Hana道場社員研修in東京~6&7回編~ | きらきら星のつぶやき☆

一体型が便利な、アイ・オー・データ機器製、集約型周辺機器IchigoDyhook、IchigoDakeもいいですが、IchigoJamIchigoCake、月額60円のお手軽IoT、IchigoSodaもつなぎたい! そう、なければ作ればいいんです。それが、メイカー。


ピンソケット付きのIchigoDakeの上に載せるアダプターを作って、接続!


用意するのは、IchigoJam用ユニバーサル基板microUSBコネクタモジュールコンポジット(RCA)端子モジュールピンヘッダ or 細ピンヘッダと線材を少々。


ピンヘッダー、全部使ってもいいですが、必要な箇所だけに絞ると抜き差ししやすくなる効果。IchigoJamに実装済みのピンソケットを利用するとまっすぐはんだづけできます。


microUSBコネクタモジュールと、コンポジット端子モジュールを置いてみて考える。


コンポジット端子の信号線(HOT)をVIDEO2へ、microUSBモジュール2番のD-をKBD2へ、3番のD+をKBD1へ、それぞれのGNDをGNDへ。IchigoDakeを停止させるために、RESETとGNDを接続。3.3Vを取るために、VCC/GNDにピンソケットを実装。


ビデオケーブルをつなぎ、microUSBケーブル(充電専用ではないもの)をキーボード端子へ、VCCの3.3VをCN5の3.3Vへつないで、IchigoDyhookのスイッチオンで起動!快適!


IchigoSodaは外部からmicroUSBで電源をとってあげましょう!


このアダプター外せば普通に、IchigoDake+IchigoDyhookとして使えます。


コンポジット端子とステレオミニ端子を直接はんだづけして作ったいい加減なモノクロ音声の変換アダプター!


実はこちら、ファミコン互換機の音声出力用でした。IchigoDyhookでも動いた「忍者ハットリくん」。IchigoDyhookの省電力機能で、キーボード一定時間無操作で画面が消えてしまう点に注意。 キーボード信号を使って、コントローラーにするのもいいかも知れませんね!

NTSCモニターとPS/2 or USBキーボードのセットなのでラズパイや昔のパソコンなど、いろいろつなげて楽しめるのもIchigoDyhookの魅力です。

links
- IchigoJamカムロボのデバッグからラズパイ製品の現場調整まで、立ち乗りでこなすIchigoDyhook! – about yrm

新潟県、ものづくりのまち、長岡市。長岡造形大、長岡市役所、長岡高専をリアル訪問!

はじめての長岡造形大学


シンボルツリーの桜!建物内外、さすが造形大!


先生の熱意によって長岡造形大内にできた、プロトタイピングルーム!


レーザーカッター切り出し「火気厳禁」かっこいい!


いいレーザーカッター、大活躍とのこと!(鯖江Hana道場にも少し小さめのあります)


かわいいサンプル。学部問わず興味ある学生多数とのこと!
コンセプト、外装、ハードウェアやソフトウェアの実装、見せ方、全部揃うと超強力!


長岡市役所隣、アオーレ長岡。新潟で30回続く、デザインコンテスト、NIIGATA IDS DESIGN COMPETITION 2020!ちょうど造形大の学長、和田さん講評されていました。


ストアで発見、ステキな卓上切出(ナイフ) MASUWA by 増田切出工場 & TWOOL(昨年度の準大賞)
企画販売は和田学長の息子さん!プログラミングに興味ありとのこと!


Insta360 EVO用ケースにほしい、伸びる、簡単、瞬間パッキング!ストラップに付けられるとより便利かも?


日本のめがねといえば鯖江ですが、長岡にもメガネ会社あり!アセテートにβチタンの芯をいれたメガネ!


かわいいコケのいれもの


企み、語り、創り、伝え、会う!


長岡駅隣のおもしろ空間、なんと左が市役所と右が市議会の議場!


旧デパートの1Fを、市営のファブ&コラボスペースとした「NaDeC BASE」長岡高専、長岡造形、長岡技科大も!


こちらも、プロトタイピングラボ、ものづくり工房あり!


長岡市バックアップのものづくり支援コンソーシアム「NAZE」と新潟の方言「ごうぎ」に漢字を当てた「豪技」


今年度初開催こども向けロボコン、ロボカップジャパンオープン!


NT鯖江にもご訪問いただいた、長岡市役所の橋詰さん、ご案内ありがとうございました!


続いて訪問、長岡高専!元気な長岡高専生!


多数の先生に参加いただいた、長岡高専にて講演&IoTプログラミング体験!(資料参考、高専生から中学生へ「はじめてのプログラミング、はじめてのIoT」 / 佐世保高専での学び

最新集約周辺機器IchigoDyhookとIchigoSodaの接続法。ジャンパーワイヤ6本使って、まずはIchigoDakeのRESET-GNDをつないで無効化し、IchigoDakeとIchigoSodaのKBD1-2/VIDEO1-2/GNDを5本で接続。

ちょっと面倒?DPCが登場すれば、ずっとシンプルになります!(IchigoJamカムロボのデバッグからラズパイ製品の現場調整まで、立ち乗りでこなすIchigoDyhook! – about yrm

4Gモジュール用には電源が必要なので、IchigoSodaにmicroUSB経由で給電。


あとは普通に使えます!接続状況表す、IchigoSoda上部の点滅が1回に変わったら、

IOT.OUT 15 OK

これでクラウドにデータが飛びます
受信したらLEDを付けて終了するプログラムも簡単!

1 IF IOT.IN()=0 CONT 2 LED1 RUN OK


GPSや高精度温湿度センサーSHT31、UVセンサーなどを搭載したIchigoSensorsを合体!
I2CでSHT31の温湿度データを読み出し、サーバーに定期的に送るプログラム(for IchigoJam 1.4)

10 POKE#700,#2C,#06:R=I2CR(#45,#700,2,#700,6) 20 IOT.OUT #700,6 30 WAIT 60*60*5:GOTO 10

シンプルに使えますが、がんばれば、割といろいろできちゃう、IchigoJam。
画面拡大(VIDEO3)して、IchigoSoda上で表示も行うIoT温度計にする例(℃をパターンを700行で生成)

5 VIDEO3:CLS:GSB@DC 10 GSB@TH 15 LC 4,4:?T/100;".";DEC$(T%100+100,2);CHR$(#708) 25 LC 4,6:?H/100;".";DEC$(H%100+100,2);"%" 27 IF TICK()>60*5 IOT.OUT T:IOT.OUT H:CLT 30 WAIT6:GOTO10 600 @TH:U=95:LET[U],#062C,#4401,#8808,#884A,#4350,#0C00,#4770 610 U=#800+U*2:R=I2CR(#45,U,2,#700,6) 620 [0]=17500:[1]=PEEK(#700)<<8|PEEK(#701):T=USR(U+2,#800)-4500 630 [0]=10000:[1]=PEEK(#703)<<8|PEEK(#704):H=USR(U+2,#800) 640 RTN 700 @DC:S="゚C":FORI=0TO7:POKE#708+I,PEEK(ASC(S)*8+I)|PEEK(ASC(S+1)*8+I)>>3:NEXT:RTN


さすが高専、トラ技ジュニア!(See also: 高橋名人とのコラボイベント


長岡名物シュークリーム、ごちそうになりました


高専x造形大で企む会(平行法で立体視可)


長岡は山本五十六氏の出身地。平和を願う長岡の直径650mという大花火の玉は直径90cm(3尺)!VR再現楽しそう。

地域の課題、ITとデザイン、力を合わせてどんどん解決!地域を越えてイノベーション!
地域のプログラミングといえば高専!GIGAスクール構想を先取りし、プログラミング的思考ことプログラミングを広めましょう!
ものづくりとデザインに力を入れるまち、長岡と鯖江。仲良くなれそう!

links
- 「プログラミング的思考」=「プログラミングする活動そのもの」 小学校プログラミング教育の手引第三版で減ったもの増えたもの
- 学校に激震!? 昭和の「一斉授業」から令和の「個別最適化された学び」へ! すべてのこどもたちに世界とイノベーションへの入口を、GIGAスクール構想とは?その実現に近いまちは?

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS