2018年7月17日火曜日

選択肢はあれど、Javaは使えるようにしたい

Javaプログラミングの演習をとおして、Javaの基礎を身につける。
(本記事の続編は、→こちらをご覧ください。

Writing with pencil and typing are the basis of this world

ここでは、以下の書籍に特化して、Javaプログラミングを学び、自分の問題解決にJavaを使えるようにすることを目指します。そのためにご参考になりそうなことを書いていきたいと思います。(続編はあるかも)

立木秀樹・有賀妙子「すべての人のためのJavaプログラミング 第3版」共立出版

初版 ー 第2版 ー 第3版

■第3版についての私のコメント

初版(2000年10月発行)、第2版(2007年9月発行)、第3版(2017年10月発行)となっています。私は、大学の情報工学科でこれらの書籍を使って(一時期、別の書籍も教科書として使いましたが)Javaを教え、また、学んで来ました。現在は、学生諸君には教えていませんが、Javaプログラミングは続けています。

この教科書の第一の特徴は、「最初から」タートルグラフィックスを使って、視覚的にプログラムの動作を確認しながら、Javaの基本を学べることです。それは、初版、第2版、第3版でも変わっていません。それまで、C/C++の基礎を教えていた同僚のN先生が、私のJava授業の演習に加わった際に述べられた言葉は印象的でした。「これまでのテキスト主体の演習に比べて、こんなグラフィックスの演習はとても難しいのではないかと思っていたら、学生諸君は意外にも、グイグイとプログラムを書いて、修正して、動かしているのを見て驚きました。これは衝撃的でした!」と。

この教科書は、いわゆる「易しい教科書」に比べて、説明が緻密であり、その結果として文字数がとても多いように見えます。それが、一見、「これはかなり難しい教科書」という印象を与えるかも知れません。しかし、説明文が少なく、文字が大きく、やさしそうに見える教科書は、初心者には逆に理解し難いでしょう。なぜなら、詳しい説明がないのですから、当然そうなります。これに対して、この教科書は、説明に分からないところがあっても、例題のJavaプログラムを動かして、その結果を見ながら、プログラムの構造を見直し、さらに、本文の説明を何度か繰り返して読めば理解が深まってくるように作られています。

第3版になって、変更になった項目で大きなものは、「ラムダ式と関数型インタフェース」の導入と、「これまでのGUIが、SwingからJavaFX」へと変わったことだと思います。前者は、すでに、他の多くのプログラミング言語、例えばPythonやJavaScript等も取り入れていますので、自然な流れと思います。はじめての人は、Javaにおいて、関数をデータとして扱うことには戸惑いを感じると思います。しかし、よく馴染んでくれば、ラムダ式の導入は、従来のオブジェクト指向とうまく融合していることを感じるようになるでしょう。JavaFXへの変更は、より高度なGUI(アニメーション、マルチタッチなどを含む)を持つアプリケーションの作成容易化への要請に応えるもののはずです。

また、後半では、現代のスマートフォンからスーパーコンまでにおいて必須となっている「マルチスレッドと平行処理」に、30ページほどを費やして、丁寧な説明を行っています。その部分にも、上記の「ラムダ式と関数型インタフェース」が出て来ており、ここでも、それらの用途の理解がさらに得られるように思います。

2018年7月10日火曜日

共通のソースプログラムでiOS用とAndroid用のアプリを作れるThunkableX(その3)

(その2)に書いたことに関するものですが、iOSとAndroid用に共通のソースプログラムを書ける現状のThunkable Xに関して、現時点では失望するような投稿も見られます。


I refuse to use Thinkable X (Thunkable Xは使わない)

https://community.thunkable.com/t/i-refuse-to-use-thunkable-x/31375

これまでの、Android用であるThunkable Classicに比べて、現時点では利用可能ブロックの少なさをその理由にあげているようだ。しかし、私は、(その2)で次のように書きました。

「しかし、これは無理もないことです。AndroidでもiPhoneでも、PCやMacに比べると著しくリソースに制約があります。そのうえ、同一ソースプログラムで、両プラットフォームで動かせるようなプログラミングシステムを設計・実装するとなれば、これは一大事業なのですから。今後に大いに期待します!」




これと同じ意見の人も多くて、少し安心しています。すなわち、私は、下記のような投稿(意見)に多いに賛成です。


The initial versions of any platform lacks many features. More and more features and bugs are solved in subsequent versions. Ever seen the first version of app inventor/eclipse ?
I feel Thunkable is doing very good progress. And it’s a matter of time when all the features are available.

(Google翻訳を少し直したもの:どのプラットフォームの初期バージョンにも多くの機能がありません。 ますます多くの機能とバグが、後続のバージョンで解決されています。これまで のApp Inventor/やeclipseの最初のバージョンをもそうなっていましたよ!
私はThunkableが非常に良い進歩をしていると感じる。 そして、すべての機能が利用可能になるのは時間の問題です。)

2018年7月9日月曜日

Google自動翻訳:leave no stone unturned

英語のひとつのidiomだけを取り上げて、Google翻訳の性能に言及するのはどうかと思いますが、ご参考までに書きます。最近のGoogle翻訳(英語<->日本語)はかなり優れたものなのですが、従来の英語辞書(紙あるいはデジタル版)の知識を全てとり入れた状態とはなっていないらしい。

2018年7月8日のニュースに、「英南部エイムズベリーで神経剤ノビチョクに接触し、意識不明の重体となった40代の英国人男女のうち、女性が死亡した。」がありました。この件に対して、英国のメイ首相が述べた言葉のなかの「leave no stone unturned」が頭に残りました。英語の表現(idiom)としてです。

leave no stone unturned
https://ja.wikipedia.org/wiki/石

「ひっくり返さない石が無いくらいに徹底的に調べる」の意味のようですが、ネイティブでない日本人はあまり使わない(使えない)英語だと思います。さっそく、Google翻訳で和訳してみましたが、うまく翻訳できません。

■ Google翻訳:X 誤訳
leave no stone unturned -> 石を打ちのめす

これに対して、従来の英語辞典では成句として、以下のように載っています。

■ ジーニアス英和大辞典:◎当然妥当
leave no stone unturned -> 徹底的に調べる
■ 研究社新英和辞典:◎当然妥当
leave no stone unturned -> 草の根をかき分けて捜す

もしかして、完全な英文の文脈でこれを使えば、Google翻訳もうまくいくかも... 残念ながらだめのようです。

■ Google翻訳:X 誤訳
The researcher left no stone unturned in her search for the original documents.
 -> 研究者は、元の文書を検索しても、何の不自由はない。

Google翻訳が、今後、従来の英語辞書にあるような成句や例文も十分に取り込んで、さらに発展することを希望します。

2018年7月2日月曜日

共通のソースプログラムでiOS用とAndroid用のアプリを作れるThunkableX(その2)

続編です。
「同じソースで、AndroidでもiPhoneでも実行できる」にこだわった例題をもう一題作ろうと思いました。

結論からいうと、現時点では、なかなか思うように行きません。というのは、Android版(Thunkable Classic)で使うことができた多様なコンポーネントや機能のうちの多くがまだサポートされていないためです。

しかし、これは無理もないことです。AndroidでもiPhoneでも、PCやMacに比べると著しくリソースに制約があります。そのうえ、同一ソースプログラムで、両プラットフォームで動かせるようなプログラミングシステムを設計・実装するとなれば、これは一大事業なのですから。今後に大いに期待します!

「同じソースで、AndroidでもiPhoneでも実行できる」の2番目の例題として作ろうとしたのは、以前、Android版で作成した、「本学ソーラーカーの鈴鹿サーキットでの走行軌跡の描画」Drawing of the travel locus on the Suzuka Circuit of our university solar car ) です。

快調に?そのソースプログラムを書きました。以下のものです。

鈴鹿サーキットでの走行軌跡描画のソースプログラム

早速、まず、iPhone向けにビルドして実行させました。Goodです!

iPhoneでの実行は問題なかったのだが...

では次に、これを、Andoid用にビルドして実行させましたが... Goodではないです!
直ぐにクラッシュしてしまいました。Google Map上に、点を移動してポリラインを引く際に異常終了するようでした。

こんな時は、下記のThunkableコミュニティでのディスカッションが参考になるはず。


確かにありました。「iOSでは良いが、AndroidではMap関係がうまく行かない」「The Map component does not yet supply its own latitude and longitude so we currently recommend using the Location Sensor component」等々が述べられていました。そうで したか、しばらく待ちましょう!Thunkableメンバーの健闘を応援したい。

2018年6月26日火曜日

共通のソースプログラムでiOS用とAndroid用のアプリを作れるThunkableX(その1)

*最後にある【ご参考事項】を補強しました。2018-6-28

これまでずっと利用してきたMIT App Inventor for AndroidThunkableですが、限時点でThunkableの方に、大きな進展がありますので、それを試行してみます。注目点はいくつかあるのですが、共通のひとつのソースプログラム(デザインとブロック)を用いて、iOS上でもAndroid上でも実行できる!これが最大のポイントです。

さっそく、画像認識アプリを作ってみます。3つのパートの構成にしました。初級向けには、最初のPart A (または、Part A + Part B)だけでもよいかと思います。

  • Part A:スマホで認識させたいものを撮影する。それをMicrosoft Recognizerに送って、何が写っているかの認識結果(英文)を表示させる。
  • Part B:これと同じですが、撮影済みのPhoto Libraryにある画像も認識させる。
  • Part C:認識結果に、評点と感想(コメント)を付ける。それを後で仲間とシェアするために、Media DBとRealTime DB(Firebase)に格納する。

以下に、そのソースプログラム(デザイン部とブロック部)を示します。以下がその全てです。

画像認識アプリのデザイン部

画像認識アプリのブロック部

このソースプログラム全体は、以下に公開していますので、詳細はそちらをご覧ください。ご自分のgmailアカウントに入っている状態で、下記リンクをクリックすると、自動的に、ThunkableXのプロジェクトとして、上記のソースプログラムが設定されます。

https://x.thunkable.com/copy/3a30e4c6b8b976811b85aef29bfac2e8

このソースプログラムを、iPhone用Android用にビルドして、それぞれ実行させた例を以下に示します。

共通ソースプログラムからビルドして実行した例
Part Cでは、各人が色々なものを撮影して、仲間同士でその結果を検討するために、認識結果とその人の評点、コメント(意見)を保存します。撮影画像の保存は、Media DBというものに格納します。その格納場所を示すURLとその他の情報を、RealTime DB(Firebase)に格納します。

撮影画像のMedia DBへの格納例
認識結果やユーザ評点などのRealTime DBへの格納例

【ご参考事項】
今回の試行で気がついたことなどを、ご参考までに記します。
  1. 上記に公開しているソースでは、Media DBRealTIme DBを利用するためのAPIキー情報などは削除してあります。生徒らに、Part Cを使わせる場合には、管理者がこれらのAPIキーなどを取得して各人に設定させる必要があります。
  2. これら2つのDBの設定については、 下記をご覧ください。Thunkable Docs→「Thunkable Cross Platform X」→「Create」→「Components」→「Data」→RealTimeDB, Media DB
  3. 従来のAndroid用のThunkable(Thunkable Classic)と比べて、今回のThunkableXは、使えるセンサー類の少なさが目立ちます。またExtensions機能もありません。しかし、そうだとしても、iOSにも共通に使えるようになったメリットは非常に大きいです。不足の機能も順次追加されていくはずです。
  4. iOS用のビルドには、現時点では、10分〜15分程度かかります。したがって、一定の完成度になるまでは、Live Testを使う方がよいです。WiFi環境下で、PCとiOSを接続して、リアルタイムにプログラム修正、実行ができます。Live Testには、Apple Storeにある「Thunkable Live」が必要です(→下図参照)。
  5. iOSのビルド結果は、メールで通知されます。それをiOSで(PCではなく)受信して、示されたリンクをクリックするだけでインストールされます。しかしながら、現時点では、iOS側にダウンロードできるのは、1アプリに限定されています。別のアプリをダウンロードすると置き換わってしまいます。
  6. iOSにビルドしたファイルをインストールする際に「信頼されていないソフト...」が表示される場合があります。「設定」→「一般」→「プロファイルとデバイス管理」ヘ進み、「Rappidly Inc」を「信頼する」にして下さい。
  7. Android用にも、Live Testは使えますので重宝します。そのためには、Google Playストアにある「Thunkable Live」が必要です(→下図参照)。ビルドを行う場合、通常ほぼ直ちに結果が返ってきますが、PC側にダウンロードされるので、それをメールか、Dropboxなどを経由してAndroidにインストールする必要があるようです。
  8. 今回のThunkableXと、従来のThunkableおよびMIT App Inventorとのソースレベルの互換性はほぼ全面的に失われています。iOSとの共通化のためには、全面的に設計を見直す必要があったとのことです。その意気込みは高く評価したいと思います。
Live Testに必要なアプリ

2018年6月17日日曜日

ScratchでAI(人工知能)を教えるプロジェクト

Scratchは、小中高生向けのコンピュータサイエンス、プログラミング教育に益々利用が広がっているようです。大学のオープンキャンパスなどでも活用されています。そのScratchですが、外部ボードや機器との連携を強化するextensionsなどを装備したScratch-Xにも注目が集まっています。現在まだ実験版(ベータ版)のようですが。

このScratch-Xで、ゲームなどのプログラミングをさらに進めて、AI(人工知能)も教えるプロジェクトがありました。Deep Learningを使う訳ですが、もちろん、その理論や詳細な手順は見せません。IBM Watsonを利用していて、Visual RecognizerやAssistantサービスを呼び出すようになっていますが、Scratchのブロックで包み込んでいます。

https://offspring.lifehacker.com/teach-your-kid-machine-learning-with-these-free-lessons-1826836113/amp?__twitter_impression=true

Machine Learning Projects (ScratchX)
https://machinelearningforkids.co.uk/#!/worksheets

子供にもAIの活用技術に親しんでもらおう、という意図のようです。公開されているプロジェクトのうちの「コンピュータとのじゃんけん」を実際にやってみました。手の画像の認識をAIで行うということです。

  • 自分の手で、グー、チョキ、パーの3つをそれぞれ10回づつWebカメラでとる。
  • それにラベルを付けて、Watsonに学習させる。
  • かんたんな「じゃんけんの勝ち負けのルール」をScratchで作る。
  • 新たな手の画像(グー、チョキ、パーのどれか)を与えてボタンを押す。
  • コンピュータの手と比較して勝ち負けの結果がでる。

Deep Learningを利用したScratch-Xのじゃんけんアプリ


注意書きとして、「手を撮影するとき、自分の顔が映らないようにしてね」とあります。顔画像がどこかで悪用される危険性の回避のためです。このようなことも子供の時から教えておいた方がよい。ちょっと技術の負の面が出て来ているわけですが。

手の画像にラベル付けして学習させるという例でしたが、汎用性があります。例えば、手書きに文字認識も同様に行えるわけです。
Deep Learningの勉強、学習、研究の環境は色々出回っていますが、このScratch-Xによるものも教育面で可能性があるのではないでしょうか。

2018年6月14日木曜日

BackPropagation in Neural Network with an Example (XOR) Using Multiple Micro:bits

In this article I will attempt Backpropagation in a neural network using micro:bit.

Back propagation in a neural network made with micro:bits

In the previous article, I used micro:bit to construct a neural network and took up the recognition of XOR using it.

http://sparse-dense.blogspot.com/2018/06/microbittwo-layer-perceptronxor.html

At that time, since we used the neural network weights completely learned about z = XOR (x, y), the value of z for any input pair (x, y) could be calculated with only one forward propagation.

As before, I will use micro:bit neural network. But at this time, the Backpropagation which is the foundation of Deep Learning is applied. In general, it takes a long time to learn in a neural network, since it requires repetition of forward propagation and backward propagation many times. So, here we use some good (but not complete) weights that we got before from another projects, as initial weight values. Starting from that, we should complete weights update within a small number of iterations, even on the micro:bit neural network. Please check the actual operation with the following video:



This video is also published on Youtube:
https://youtu.be/tsYr01lQ_HY

Weight updates to recognize XOR are required for the four cases of input (1, 1), (1, 0), (0, 1), (0, 0). Successively for all these cases, updates should be repeated until the error (difference between the answer and the evaluated value z) becomes smaller than the tolerance (here, 0.1). However, for the sake of simplicity, we only show weight updates for the first case x = 1, y = 1 in this demonstration. It converged after 5 iterations.

Please note that the neurons (micro:bit) of the Hidden layer and Output layer display eastward arrows or westward arrows depending on whether they are in Forward or in Bacward. Also, after the Backward is over, button A on micro:bit is pressed before Forward starts. This is to ensure the proper timing between receive and send on micro:bit radio.

2018年6月4日月曜日

Consturuct a neural network (multilayer perceptrons) using micro:bit

Let's learn the basics of neural networks using micro:bit. Understanding deepens by actually programming. For neural network learning to solve various tasks, back propagation is generally required. Learning with this back propagation requires considerably long time calculations. It is not realistic to do this with such a tiny microbit with low computing power, even though it is not impossible. Therefore, here we will try forward calculation only, using the edge weights of the already learned neural network. Even so, you can experience some of the important points of the neural network.

Neural network with micro:bit

 this illustrates evaluation of z = XOR(1,1) = 0

One thing to notice here is that one microbit plays a role of one neuron. By doing so, you can have an image that is close to real neurons. Here, XOR (Exclusive OR) is the problem. z = XOR (x, y) shows 1 only if either x or y is exclusively 1. Otherwise the value of z is 0. In the microbit, JavaScript and MicroPython can be used, but here we use MicroPython. The reason is that microbit JavaScript currently does not support calculation of float type data. Float type operation is mandatory for calculation of Neural network. Also, neurons (microbit) exchange signals with each other. For that we use send / receive on radio. This is not Bluetooth. Additionally, as the activation function, we use the sigmoid function.

The weights of the edge used above are the results of being learned by the following NetLogo program. The red line denotes a negative value, the blue line denotes a positive value, and the thickness shows the magnitude of the absolute value.

Weights used in the above example were obtained by this NetLogo  simulation

Please see the video for an actual operation example.
https://youtu.be/PPUcsXgCnZ4

In the first half, z = XOR (x, y) is calculated where x = 1, y = 1, and then the value 0.0178... was obtained, so that "0" was finally displayed. On the other hand, the second half is the case of x = 1 and y = 0. Now that 0.9852... has been obtained, "1" was displayed as the final result of z.


2018年6月2日土曜日

神奈川工科大学のある厚木市三田でもホタルが見られるようです

蛍(ホタル)の季節が近づいてきました。神奈川工科大学は、厚木市下荻野にありますが、実は、大学の敷地の東側半分ほどは、下荻野ではなく三田という地区になっています。三田は、その名のとおり、水田地帯だったはずです。いまでも水田はありますが、十数年前と比べると激減しています。その大半は、資材置き場や、駐車場、宅地になりつつあります。カエルの鳴き声が年々弱くなっていることも、それを反映しています。


神奈川工科大学情報学部棟(黄色の矢印)が遠くに見える水田地帯。

近年激減してしまったが、今は、ちょうど田植えの季節


神奈川工科大学から東の方へ降りた、三田の水田のあたりには、まだホタルがいるようです。ホタルの放流活動も行われているのかも知れません。以下のような看板が出ていました。貴重なホタルを大切にしましょうということですね。

厚木市三田に残るホタルの生息地

2018年5月26日土曜日

Demonstrating Block Chain with a set of micro:bits using radio

Currently, blaockchain, which is the basic technology of crypto currencies, attracts attention. Below is an example that lets us easily learn the basics of Bclockchain technology using micro:bit.


micro:bit radio-blockchain

https://makecode.microbit.org/projects/micro-coin

Although this is not practical, it is convenient for us to experience the following basic technologies:
  • Structure of the block which is an element of blockchain, especially storage of hash value on previous block information
  • Broadcasting of newly added block information which is required after new crypto currency is obtained
  • How to add a new block to the chain
  • Mechanism to maintain only one consistent block chain

The following experiments were conducted basically in accordance with the above url. However, we use six micro:bits under the wireless network.  In addition, I have created an original method to display the number of coins on the LED.  Next figure illustrates the experiment.


In the figure below, the micro:bit in the lower left corner got a new coin. In the real world of crypto currency,  in order to obtain new coins,  it is necessary to solve certain problems (that is,  proof of work).  However,  here,  for the sake of simplicity,  it is possible to obtain a coin stochastically by using random number generated when macro:bit is shaken.  The micro:bit that got the coin creates a new block,  adds it to the chain,  and broadcasts it to other micro:bits.  In the figure,  one flashing LED means broadcast,  and two flashing LEDs indicate that the micro:bit  has received it.

One micro:bit that obtained a coin broadcasts its information

The following figure shows the number of coins currently held by each node (micro:bit). You can display this information by pressing button A on each node. Each of the three nodes has one coin and the other one node holds three coins.

the number of coins that have been obtained by each micro:bit 

Next, we verify that the block chain known to each node is only one legitimate one. As a simple way to show it, the length of the block chain known to each node is displayed. Press button B on each node to display it. Here, all nodes indicate 6 (= 1 + 1 + 1 + 3). This is a proof of integrity that there is only one legitimate block chain.


the length of the block chain each micro:bit can see (6 blocks)


The micro:bit program (blocked JavaScript) that realizes the above is shown in the figure below. In this, readio-blockchain for exchanging block information is used. It is published in the following URL:

https://makecode.microbit.org/pkg/microsoft/pxt-radio-blockchain

In addition, I created my own custom blocks to display on the LEDs the number of coins and the length of the chain.


micro:bit program that demonstrates  block chain

radio-blockchain components

custom JavaScript blocks for showing numbers on the LED

The above was done using 6 actual micro:bits. However, before that, you can also check the operation by simulation. This simulator works very well. As shown in the figure below, for example, you can simulate an operation to obtain coins by shaking micro:bit. Here, when you shake the microbits on the right side, the image of micro:bit is distorted, so you can get a sense of reality.


showing the number of coins in the simulation

shaking to get a coin in the simulation

2018年5月20日日曜日

Making custom blocks(with JavaScript) for micro:bit applications

This small article describes a feature of micro:bit visual block (with JavaScript). In particular, it is about user's block definition function. In the last article (No. 3), micro:bit was used as an indicator of pips of the dice. Dice is also commonly used in games and other applications.

Therefore it is convenient to have a custom block (user defined block) to display the dice 's eyes on the LED. To exceed the beginner level, it is essential to use this custom block function. A simple example is shown below. 


In the following, the function "show_pips_on_dice" was defined as a custom block. The argument denotes the number of pips of the dice. Every time you press button A, the eyes of the dice are displayed in ascending order. Thanks to the custom block, you can write it concisely like this.

Using custom block for displaying pips on a dice

The setting of this custom block is performed as shown below. Define this function "show_pips_on_dice (n: number)" in the namespace "custom". Then you can use (call) this function as a block from the menu "Custom". This definition content is stored in a file called "custom.ts".

Definition of a custom block for displaying pips on a dice


2018年5月14日月曜日

Cooperation between micro:bit and MIT App Inventor (No.3)

In the last article (No.2), communication between micro:bit and Android smartphone was done with Bluetooth UART service (serial over Bluetooth). I will also use this UART this time, but I would like to consider a simple example including NFC which is a short range wireless communication other than Bluetooth.

The figure below shows the contents. I prepared a big toy dice. We prepared six NFC tags on which the number of eyes on each side are written, and incorporated them on each surface of the dice. Turn the Android terminal upside down and touch the dice there. Then the number of eyes on the opposite side of the touched surface is read. The number of eyes read is sent to micro:bit by UART communication. Pressing the micro:bit buttonA will make it receive that information and display the number of eyes on the micro:bit LED.



please see also the following youtube:
https://youtu.be/aOb69nweq3c

Using NFC in addition to BLE UART

The Android program was created using MIT App Inventor. After reading NFC tag information (number of eyes of dice), it will send the number of eyes on the opposite side of that face to micro:bit using UART. At the same time, an image corresponding to the number of eyes should be displayed on Android's screen.

Android program (reading NFC tags and sending with UART)

On the micro:bit side, pressing buttonA gets the number of eyes sent from Android, so we just display it on the LED. The function "show_spots_on_dice" is defined with JavaSript as a custom block. In this example, since we received 4 as the number of eyes, the four outer corners of the LED are lit.


micro:bit program to receive the pips of a dice and to display it on the LED board

2018年5月12日土曜日

Cooperation between micro:bit and MIT App Inventor with Eddystone signals (No.2)

In the last article (No. 1), a program (with microbit JavaScript block editor) that sends Eddystone signals (either Eddystone-UID or Eddystone-URL) and a program that receives it with Android (by MIT App Inventor) were presented.

In this article, Eddystone-URL data that should be adversised by maicro:bit is updated from Android side. To do that, I use the Bluetooth UART service (serial over Bluetooth). Overview of the mechanism is as shown in the figure below.




Let's see the operation of Android. (a) is the initial state. In (b) we are sending a new URL to the micro bit in response to a request. In (c), the URL currently stored in microbit should be sent back for confirmation.



URL information updating

Next, I will examine the source program briefly. The figure below is a micro:bit program. When you press button B, URL information should be received from Android side. Also, if you touch pin P0, it will send the current URL to Android. Press button A to advetise the URL.





The main parts of the Android program created with MIT App Inventor are shown below. We are communicating using BLE's UART, but in App Inventor we can use BLE extensions, which makes it very concise. However, in addition to this, connection settings with a standard BLE device, decoding of URL information, etc. are also necessary.



Main part of BLE UART communication with MIT App Inventor

Finally, here is the result of displaying the web page of the adverrtised URL in another application. For example, in the above figure, we setup 6 characters "RwaMqL". This is the actual URL with the header "http://goo.gl/" appended. However, this is a shortened version of the original URL. That's because of the limitation of the number of characters that can be advertised.

The shortened URL "RwaMqL" denotes Dept. of Mathematics, Hokkaido Univ.



2018年5月9日水曜日

Cooperation between micro:bit and MIT App Inventor with Eddystone signals (No.1)


Let's try to collaborate between micro:bit which is currently drawing attention and MIT App Inventor for Android. As one of them, we exchange Eddystone signals. There are several signal configurations of Eddystone, but here we deal with Eddystone-UID and Eddystone-URL among them.

Micro:bit (advertiser) and Android (receiver)


Let's perform the demonstration and watch it.
As a Microbit program, we made it possible to advertise these two types of Eddystone signals.  First, when you press micro: bit button A, it advertises the current pitch (inclination to the horizontal plane) and temperature. In the figure below, you can see that they are being received on the Android screen. That is, at the present time, the pitch of micro: bit is 30 degrees, and the temperature is found to be 26 degrees Celsius.

Pressing buttonA on the Micro:bit makes it advertise two kinds of data

Next, when pressing the micro:bit button B, a certain URL is advertised. On the screen of Android, the received contents are displayed.
Pressing buttonB on the Micro:bit makes it advertise an url of a web page


And soon, the web page for that URL was automatically displayed. In this case, it is a web page about the Akita dogs which became more famous for being given to famous Russian ice figure skater Miss Zagitova (Алина Ильназовна Загитова).
In this case, cheerful “Japanese Akita Dogs” web page is illustrated


Let's see these source programs. The following figure is a micro:bit advertising program. By pressing button A or button B you can issue either Eddysotne-UID or Eddystone-URL.


Eddystone advertising program (micro:bit)

Next is the Android program that receives Eddystone. This is made with MIT App Inventor only. It uses the extensions function for BLE (Bluetooth Low Energy), so it's very easy to write. However, the figure below shows only the essential part. By this alone, it is possible to directly acquire the content of the received data advertised. Thereafter, for example, it is necessary to decode the received URL data and convert it into a character string. It is also necessary to pass it to the Web viewer. All of them can also be written with MIT App Inventor.
Main part of Eddystone receiving program (MIT App Inventor)


please read this related article

Thanks
FoYo