SlideShare a Scribd company logo
1 of 74
Download to read offline
ESP8266EXで位置推定
2016-08-19
サイボウズ・ラボ
西尾泰和
前回までのあらすじ
Wifi接続可能なマイコンESP8266EXを
PCにUSBケーブルで接続して
UARTでATコマンドを発行して使った
2
http://www.slideshare.net/nishio/wifiesp8266ex-espwroom02-espr-developer
ESP8266EX
Espressif Systemsの出しているWifiチップ
802.11 b/g/n、WPA/WPA2
Arduinoスケッチを書きこめる
3
http://espressif.com/en/products/hardware/esp8266ex/overview
おさらい
ESP-WROOM-02
ESP8266EXとアンテナとをセットにして
日本の技適マークを取得した、
日本で合法的に使えるWifiモジュール。
550円@秋月電子
4
http://akizukidenshi.com/catalog/g/gM-09607/
おさらい
AT+PING
ATコマンドを使ってWifi接続し
PINGを打ったりできる:
AT+PING=“www.google.com”
+6
OK
5
おさらい
今回のあらすじ
6
今回のあらすじ
PC(と人間)が制御する代わりに、マイコンにプロ
グラムを書きこむ
PCからのUSB給電の代わりに、電池で駆動する
PCがいない間に収集したデータを溜めておいて
あとでPCにまとめて送る
(最終的にそのデータで位置推定をする)
7
「Arduinoとして使う」
「ESP8266はArduinoとして使える」という表現
がされる。具体的には何ができるのか?
ArduinoスケッチをArduino IDEでコンパイルして
ESP8266に書きこむように設定することができる
つまり、Arduinoのような気分で開発できる
8
設定方法
Arduino 1.6.4 からはサードパーティ製のパッ
ケージが簡単にインストールできるBoard
Managerが追加されたので
“Installing with Boards Manager” *
の通りにやれば手軽。
9
* https://github.com/esp8266/Arduino#installing-with-boards-manager
Start Arduino and open Preferences window.
Enter http://arduino.esp8266.com/stable/package_esp8266com_index.json into
Additional Board Manager URLs field. You can add multiple URLs, separating them with
commas.
Open Boards Manager from Tools > Board menu and install esp8266 platform (and don't
forget to select your ESP8266 board from Tools > Board menu after installation).
具体的に何が?
設定方法はわかったが、
中で具体的に何が行われているのか?
10
Arduino IDEがやってること
Arduinoスケッチ(*.ino)
↓コード変換
C++などのソース(*.cpp)
↓avr-gccとかでコンパイル
バイナリ(デバッグ用とマイコン用)
↓シリアル経由でマイコンに書きこみ
プログラム書きこみ済みマイコン
11
ESP8266 for Arduinoの仕組み
compiler.c.cmd=xtensa-lx106-elf-gcc
compiler.elf2hex.cmd=esptool
12
https://github.com/esp8266/Arduino/blob/master/platform.txt
avr-gccの代わりにxtensa-lx106-elf-gccを使ってELF
バイナリを作ってからesptoolでマイコン用バイナリ
に変換する……などの設定が前述Board Managerに書
かれている。
(余談)ESP8266EX は「Tensilica’s L106 Diamond series 32-bit processor」
を積んでいる(原文表記ママ)。なおTensilicaは既にCadence Design
Systemsの子会社になっていて、上記表記で検索してもCadenceのサイ
トがヒットし、混乱した。xtensaはTensilicaの製品ブランド名。
http://ip.cadence.com/ipportfolio/tensilica-ip/xtensa-customizable
(余談)2割でWifi、残りを使う
ESP8266EX is embedded with Tensilica L106 32-
bit micro controller (MCU), which features extra
low power consumption and 16-bit RSIC. The
CPU clock speed is 80MHz. It can also reach a
maximum value of 160MHz. Real Time Operation
System (RTOS) is enabled. Currently, only 20% of
MIPS has been occupied by the WiFi stack, the
rest can all be used for user application
programming and development.
13
http://download.arduino.org/products/UNOWIFI/0A-ESP8266-Datasheet-EN-v4.3.pdf
「Arduinoのような」って何?
「Arduinoのような気分で開発できる」
↑具体的にはどんな感じで開発ができるのか?
14
「ような」って言うけどだいぶ違う
Arduino
電源が入るとユーザプログラムが走る。
IDEで書きこみコマンドを実行すると書きこまれ
る。
ESP8266EX
IO0がHIの状態で電源を入れるとユーザプログラ
ムが走る。
IO0がLOの状態で電源を入れると書きこみモード
になり、その状態でIDEで書きこみコマンドを実
行すると書きこまれる。
15
ハードウェアをいじる必要がある
ArduinoのようなつもりでIO0=LOを忘れたり、
切り替えた後でリセット(もしくは電源ON)を
忘れると、IDEの書きこみコマンドが失敗する
16
Uploading 227760 bytes from C:¥…….ino.bin to flash at 0x00000000
warning: espcomm_send_command: didn't receive command response
warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed
error: espcomm_upload_mem failed
失敗するとコンパイルからやり直しなので
地味に時間がもったいない。
再書き込みコマンドがあればいいのに。
なぜArduinoは切り替え不要?
Arduinoのブートローダ * は
・起動するとシリアルを読み、
コマンドに従って書きこんだりする
・コマンドが5回間違うか、
シリアルに文字が来ないまま1/16秒経つと
ユーザープログラムを起動
という仕組みになっている。
17
https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/bootloaders/a
tmega/ATmegaBOOT_168.c
Q&A
Q: 1/16秒って短くない?
A: Arduino IDEはソフトウェア的に
リセットピンも操作するので、
リセット直後にコマンドを送れる。
18
ATMEGA168の1番ピン(RESET)が
通常時はプルアップされていて
スケッチ書き込み時には
USBシリアル変換基板がLOに
引っ張る仕組み
(参考)Arduinoのブートローダ書きこみ
そのブートローダはどうやって書きこむのか
19
市販のArduinoを購入するとブートローダ書きこみ済みで送られてくるので意識しない
「ブートローダ書き込みプログラム」が
書きこまれたArduino
SPI * で書きこみ対象に接続
RESETがLOの間、書き込みモード
* SPIについては前々回解説した
http://www.slideshare.net/HirokazuNishio/i2craspberry-pi
図引用元
https://www.arduino.cc/en/Tutorial/ArduinoISP
(参考)ArduinoISP
Arduinoに「PCからUARTで来たデータを、ター
ゲットにSPIで送る」というプログラム * を書き
こんでIn-System Programmer(ISP)として使う
20
http://www.atmel.com/images/doc0943.pdf
https://github.com/arduino/ArduinoISP
(追記)ざっくりまとめ
Arduinoのブートローダ書き込みの仕組み
通常のスケッチを書きこむときに使う2番3番ピ
ン(UARTのTX, RX)ではなく、別のピンにSPIで接
続して書きこみコマンドを送信している。
書きこみモードかどうかの判別は0番ピンをLOに
引っ張り続けることで実現している。
21
書きこめた
きちんとIO0=LOしてリセットすることで
Arduino IDEでスケッチを書いて
ESP8266EXに書きこむことができた。
空っぽのスケッチで使用可能なフラッシュメモリ
434KBのうちの半分、222KB程度が使われる。
(フラッシュメモリは4MBあるはずなのでArduino
スケッチを書きこむために使える領域はそのごく
一部ということだろうと思う)
22
最大434,160バイトのフラッシュメモリのうち、スケッチが
221,999バイト(51%)を使っています。
最大81,920バイトのRAMのうち、グローバル変数が31,564バイト
(38%)を使っていて、ローカル変数で50,356バイト使うことが
できます。
今回のあらすじ(再掲)
PC(と人間)が制御する代わりに、マイコンにプロ
グラムを書きこむ
(今ここ:空っぽのプログラムが書きこめた)
PCからのUSB給電の代わりに、電池で駆動する
PCがいない間に収集したデータを溜めておいて
あとでPCにまとめて送る
23
リファクタリング
先に進む前に回路をリファクタリングする。
IO0のLO/HI切り替えや、リセットを、ケーブル
の抜き差しで実現していたが、これは面倒
24
IO0のLO/HI切り替え
必要に応じて差し替える
リセット:
抜いてGNDに刺してから
元に戻す(宙ぶらりんに
すると変なところに接触
して問題を起こすので)
USBシリアル基盤
固定されていないので不安
リファクタリング後
25
ここの内容は後述
ここの
内容は
後述
リファクタリング後
26
IO0のLO/HI切り替えスイッチ
リセットスイッチ
L字ピンヘッダ (ホットボンドとかで固定してもよいかも)
リファクタリングでバグを仕込む
なぜかスケッチが書きこめなくなる
↓
スイッチに置き換えた回路を
ケーブルに戻しながら何が原因かを究明
↓
原因は……
27
スイッチの導通方向の誤解
「ボタンを押すとBC間
が導通する」と誤解
実際は「BC間は常時導
通、ボタンを押すとAB
間が導通する」だった
→リセットスイッチが
常時押されている状態
28
A
B
C
新しく使う部品の挙動は、推測せず、小さい回
路で挙動を確認するべき。(ソフトウェアと同じ)
無意識に「こういう挙動だろう」と思い込みがちなので、意識して確認せねば……。
Wifiライブラリを使う
1: サンプルコードをコピペする
↓
2: なぜか動かない
まず作業の流れを追って(出題編)
それから何が間違っていたか解説(解答編)
29
ドキュメントを見る
esp8266/Arduinoのドキュメントを見る
30
「だいたいWifi shieldライブラリと同じ、違いは~、
ここでmore commandsが見れる:~」とか書いてる
リンクをたどる
Arduino公式のWifiライブラリのドキュメントだ
31
サンプルを選ぶ
32
周辺のアクセスポイントを表示する
ScanNetworksを選ぶ
ScanNetworks
802.11b/gのネットワークをスキャンして
シリアルモニタに出力します、とか書いてある
サンプルコードをArduino IDEにコピペして
ESP8266に書きこむ
33
結果
1: シリアルコンソールに謎のメッセージが流れる
2: そのメッセージについて調べてたら
いつの間にかゴミが出力されていた
34
Baudが途中で変化している
初回メッセージは74880Baudだが
続きのゴミは115200Baudで見ると、定期的に
よく似たメッセージが送られてきている
35
ets Jan 8 2013,rst cause:2, boot mode:(3,2)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ld
ets Jan 8 2013,rst cause:4, boot mode:(3,2)
wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ld
初回メッセージ
(74880Baud)
定期的メッセージ
(115200Baud)
何がメッセージを出しているのか?
定期的に表示されるのだから定期的に実行される
loop()の中身が影響しているのかと思いコメント
アウトするが、挙動に変化なし
setup()の末尾で色々Serial.printしてみても振る舞
いに変化なし
コードではSerial.begin(9600)なのに115200Baud
で読めるメッセージが来ていること自体が変
36
Watchdog Timer
システムがおかしくなった時
(一定時間特定のアクションが行われなかった時)
に自動的にリセットを掛けるしくみ
定期的メッセージのwdt resetはこれを意味している
37
https://en.wikipedia.org/wiki/Watchdog_timer
原因コード
Wifiシールドが見つからなかった時に
無限ループに入る
→Watchdog Timerにリセットされる
38
原因
このサンプルコードはArduino Wifi shield用!
39
後から見直してみると気付くチャンスはいっぱいあったのに
なぜか気づかずに突き進んでしまった……。
つまり
#include <WiFi.h>
ではなく
#include <ESP8266WiFi.h>
40
サンプルはこちら:
https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi/examples
Q&A
Q: なぜボーレートが途中で変わるのか?
A: 詳細は不明だが、自分が書いたコードに
Serial.beginがなくても74880と115200で前述
メッセージが表示されるので、ESP8266のファー
ムウェアの中でそう実装されているのだと思う。
41
結果
周辺アクセスポイントをスキャンし、
SSIDと電波強度のペアをシリアル出力
することができた
42
今回のあらすじ(再掲)
PC(と人間)が制御する代わりに、マイコンにプロ
グラムを書きこむ
(ここまでできた)
PCからのUSB給電の代わりに、電池で駆動する
PCがいない間に収集したデータを溜めておいて
あとでPCにまとめて送る
43
今回の目的(再掲)
44
電池駆動
PCにつながっていない状態で動くようにしたい
そのためにUSB給電で動いているのを
電池で動くようにしたい
45
電池駆動
USBの5Vから3.3Vを
作っているこれ→
3.5V~5.5Vの入力電圧
で3.3V出力
最大600mA出力可能:
ESP-WROOM-02は起動
時に300mA程度流れる
らしいがこれならOK
単三電池3本4.5Vから
3.3Vを作る戦略
46
LM3671搭載 DC-DCコンバータ
ADA-2745
https://www.switch-science.com/catalog/2638/
回路
47
ここの
内容は
後述
回路(拡大)
DC-DCコンバータの
入力が
USBからの5Vか
電池からの4.5Vか
をスイッチで切り替
える
48
消費電流
テスターで測ってみたところ70mAくらい
ボタン電池CR3032なら220mAhだから3時間
単三電池なら2000~2700mAhだから30時間
というぐらいのオーダー
Deep sleepモードに入ればテスターで計測できな
いぐらいに減るので電池で長期間運用する必要が
あればそこら辺を頑張る必要がある。今回はやら
ない。ESP.deepSleep(60 * 1000);
49
電気二重層キャパシタ
50
電気二重層キャパシタ
静電容量のとても大きなコンデンサ(1F)
とはいえ電池に比べるととても小さい。
1Fのコンデンサに5Vの電圧をかけると5Cの電荷
が溜まり、それを毎秒70mAで吸い出すと、
71秒でなくなる。(実際には電圧が下がって最後
まで使い切れないのでもっと短い)
電池切れの振る舞いを観察するためにつないだ。
51
電気二重層キャパシタで駆動
52
** Scan Networks **
number of available networks:15
(略: スキャンに成功)
** Scan Networks **
Exception (0):
epc1=0x4020f601 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00
ctx: sys
sp: 3ffffda0 end: 3fffffb0 offset: 01a0
>>>stack>>>
3fffff40: 40204df0 00000000 3ffe94e0 3ffe94ec
3fffff50: 00000000 00000103 00000000 0000001b
3fffff60: 00000000 ffffffff 40204a3f 3ffec6a0
3fffff70: 3ffe94e0 3fffdcc0 3ffe8c80 3ffe8c80
3fffff80: 00000050 3ffec6a0 3fffdab0 00000000
3fffff90: 40204367 3fffdab0 00000000 402029a3
3fffffa0: 3ffe8c80 40000f49 3fffdab0 40000f49
<<<stack<<<
「@ェrjrA(!鬼ヒu巾奚XヒQ兊�ム*!Bス瘰�
電源を切っても
1回スキャンに成功する。
2回目で死ぬ。
電源電圧
ESP8266EXには電源電圧を取る
APIがある。*
0.1秒ごとに電源電圧を表示する
プログラムを走らせて電源断すると
14秒くらいで電圧が足りなくなって
死ぬのが観察できる
乾電池で動かす場合も電圧を監視し
た方がいいかも。
53
199:3161
200:3160←電源断
201:3160
202:3160
203:3160
204:3160
205:3160
206:3158
207:3158
:
299:2309
300:2302
301:2289
:
337:2000
338:1991
339:1982
340:1973
341:2034
��
* ADC_MODE(ADC_VCC);してESP.getVcc()
Q&A
Q: 電気二重層キャパシタはDC-DCコンバータの
前につないだ?後につないだ?
A: DC-DCの前、電池なら4.5Vの電圧が掛かって
いるラインにつないでいる。途中までは3.16Vが
出ているが、そのうちDC-DCの要求する入力電圧
を満たせなくなって出力電圧が落ちている。
54
Q&A
Q: 電気二重層キャパシタって電解コンデンサ?
A: 電解コンデンサは、陽極のアルミニウム電極
に絶縁層として酸化被膜が形成されており、陰極
との間は電解液で満たされ、酸化被膜の前後でコ
ンデンサを形成する仕組み *
(次ページに続く)
55
* アルミニウム電解コンデンサ - 原理 | エルナー株式会社
http://www.elna.co.jp/capacitor/alumi/principle.html
** 電気二重層キャパシタの基礎(前編) 電気二重層キャパシタって何? | 村田製作所
http://www.murata.com/ja-jp/products/emiconfun/capacitor/2015/03/24/20150324-p1
Q&A
(続き)電気二重層キャパシタは陽極・陰極とも活
性炭で、電解液の中を移動したイオンが電極表面
に配列することで電極表面に分子1層分の薄いコ
ンデンサが形成されて電荷を溜める仕組み。**
電解液は何でもよいわけではなく*3、電極との間
で電子の授受が起きにくい *4 物質(例: 硫酸) *5を
選択する。有機系電解液は耐電圧が(硫酸などの)
水溶液の3倍の耐電圧がある*6
56
*3 塩水だと電気分解されちゃうしね *4 「電気化学的に安定」「対酸化還元」という
*5 例: 希硫酸は1Vの電圧では電流が流れない http://capacitors-forum.org/jp/admission/
*6 「電気化学キャパシタの開発と応用II」シーエムシー出版
補足
電気二重層キャパシタは、電波を飛ばすなどの
「一時的にたくさんの電力が必要」なデバイスを
「太陽電池で蓄電しておいて、一気に使う」とい
う使い方をしたりするようだけども、今回は太陽
電池化までは手が回らなかった。
電力消費の激しいWifiはそもそも向いていないと
思うので試すならBluetooth Low Energyとかで。
57
今回のあらすじ(再掲)
PC(と人間)が制御する代わりに、マイコンにプロ
グラムを書きこむ
PCからのUSB給電の代わりに、電池で駆動する
(ここまでできた)
PCがいない間に収集したデータを溜めておいて
あとでPCにまとめて送る
58
データを溜める
「PCにつながってない状態で動く」
を実現する上では
「取ったデータを即座にシリアルで送る」
という仕組みをやめなければいけない。
そこでデータを溜めておいて、後で吸い出す。
59
「取ったデータを即座にWifiで送る」という選択肢は?という疑問には
「接続可能なWifiの圏外に出る可能性があるなら、結局データは溜めないと」と答える
SPIFFS
SPI Flash File System
ESP8266EX上のフラッシュメモリ上に
ファイルシステムを作ってそこに書きこむ
フラッシュメモリがそもそも4MBあって、
そのうち設定によって1Mか3Mを
ファイルシステムとして使える(意外と広い)
60
https://github.com/esp8266/Arduino/blob/master/doc/filesystem.md
EEPROM
別の手段としてEEPROMライブラリでは
固定長のデータを、先頭アドレスを指定して
書きこむことができる。
今回は1回のスキャンで何件のアクセスポイント
が見つかるか可変長なので向いてないと思った。
61
https://github.com/esp8266/Arduino/tree/master/libraries/EEPROM/examples
今回の応用:位置推定
今のオフィスビルのエレベータは何回に到着した
か音声案内がない。そのため視覚に障害があると
自分が何階についたかわからない。
解決策として加速度とか気圧とかビーコン設置と
か色々な案があるが「すでに設置されているWifi
をビーコン代わりに使えないか」と思いつく。
→オフィスの27階と28階を周辺アクセスポイント
の電波強度で識別できるか実験したい!
62
回路
GPIOに状態表示のため
のLEDと2つのボタンを
接続
ボタンが押されている
間、Wifiをスキャンし
てSSIDと電波強度を記
録
→27階で黒ボタン、
28階で白ボタンを押す
63
実際のコード(メモ)
←setup
64
if (!SPIFFS.begin()) {
Serial.println("Failed to mount file system");
return;
}
File f = SPIFFS.open("/data", "a");
if(!f) {
Serial.println("file write error");
return;
}
f.print("class,");
f.println(btnBlack);
for (int thisNet = 0; thisNet < numSsid;
thisNet++) {
f.print(WiFi.SSID(thisNet));
f.print(",");
f.println(WiFi.RSSI(thisNet));
}
f.print("finish,0");
f.close();
周辺のWifiアクセスポイントを
スキャンしてSSIDと電波強度と
その時に押されていたボタンと
をファイルに追記
吸い出す
電池駆動で持ち歩いてデータを収集した後、
PCにつないでシリアルコンソールで
吸い出しコマンドを送ると
シリアルコンソールに出力する。
65
「既知のWifiアクセスポイントが見えたらそこに接続してサーバにアップロード」でも
選択肢としてはアリなのだけど、今回はこういう仕組みにした。
実際のコード(メモ)
66
void printFileContent(){
File f = SPIFFS.open("/data", "r");
if(!f) {
Serial.println("file read error");
return;
}
Serial.println("open");
while(1){
String line = f.readStringUntil('¥n');
if(line.length() == 0) break;
Serial.println(line);
}
f.close();
Serial.println("close");
SPIFFS.remove("/data");
}
if(Serial.available() > 0){
String s = Serial.readStringUntil('¥n');
if(s.startsWith("show")){
printFileContent();
toScan = false;
}
Q&A
Q: シリアル通信するということはシリアル通信
のコードを実装しないといけない?
A: もちろんそうなのだけど、ArduinoのSerialラ
イブラリが使えるので前述コードのように
Serial.availableでデータが来ているか確認して
Serial.readStringUntilで1行読み込んで、それが目
的のコマンドなら処理をする、という実装をする
だけ。大した実装量ではない。
67
サイズ感
SPIFFSとESP8266Wifiを使ったコードでも
まだまだ余裕がある。
68
最大434,160バイトのフラッシュメモリのうち、スケッチが221,999バイト
(51%)を使っています。
最大81,920バイトのRAMのうち、グローバル変数が31,564バイト(38%)を
使っていて、ローカル変数で50,356バイト使うことができます。
最大434,160バイトのフラッシュメモリのうち、スケッチが252,029バイト
(58%)を使っています。
最大81,920バイトのRAMのうち、グローバル変数が33,076バイト(40%)
を使っていて、ローカル変数で48,844バイト使うことができます。
再掲:空っぽのスケッチ(p.22)
今回のあらすじ(再掲)
PC(と人間)が制御する代わりに、マイコンにプロ
グラムを書きこむ
PCからのUSB給電の代わりに、電池で駆動する
PCがいない間に収集したデータを溜めておいて
あとでPCにまとめて送る
(ここまでできた)
69
データの分析
27階と28階で全90件のデータを収集。
23次元。SSIDごとの電波強度を
正の値の範囲にオフセットしたもの。
SSIDが見つからなかった場合は0とする。
ロジスティック回帰で識別できるか
LeaveOneOutでクロスバリデーションした。
70
結果
正解率100%!
出力された確率値は
平均98.7% 標準偏差4.9%
かなり自信をもって識別出来ている。
71
寄与率
25階の匠大塚
HW01Fはモバイ
ルWifiっぽい
72
[(-0.75174650644165308, 'Endo_Lighting_GW_BC863D'),
(-0.32922164450111607, '203Za-479863'),
(-0.16863513660418045, 'CB_PERSONAL'),
(-0.15253474410936466, 'takumi-otsuka'),
(-0.13745041107642145, '305ZT-OPRO7'),
(-0.11052354781540112, 'takumi-office'),
(-0.10845149321438578, 'GUEST@CYBOZU'),
(0.0, 'URoad-9BFA78'),
(0.0, 'URoadWPS-9BFA79'),
(0.0, 'logitecgameuser'),
(8.2469479800687644e-06, 'CWLOG'),
(0.0086698186017501577, 'D_MAC_VOICE'),
(0.014008637452839746, 'Den of Cavy'),
(0.037548926177205628, 'aterm-d2be63-gw'),
(0.047522837348979427, 'aterm-d2be63-g'),
(0.15630282157435069, 'CBWIRELESSLAN'),
(0.16803078872845839, 'HW01F-B37A33'),
(0.24211192295107467, 'HW01F-B369AF'),
(0.30078688910126239, 'SlankDevNet'),
(0.33380203768152689, 'HW01F-B378EB'),
(0.46999316370163002, 'GL06P-0863615DD918'),
(0.50892947486630757, 'Cykoknak')]
Future work
もっと近い領域(28階の会議室の違いなど)を
識別できるかどうか試す。
いまSSIDを使っているので同一名称SSIDは
もっとも電波の強い物だけを使っているが
BSSIDを使えば同一名称でも区別できるから
識別精度が上がるはず。
Probe Request(次回発表予定)の情報を使うと
さらに識別精度が上がるかも??
73
Future work(やるかも)
識別機がロジスティック回帰だから
それ自体をESP8266の上で動かすのも難しくない
いっそ学習機もESP8266の上で動かすと面白いか
も?(ロジスティック回帰よりPassive Aggressive
の方がいいかも?むしろロジスティック回帰でき
れいに分かれるようなデータであることを考える
とパーセプトロンでも十分いけるかも?)
74

More Related Content

What's hot

UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動uchan_nos
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2uchan_nos
 
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術Hiroaki Nagashima
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
RootlessコンテナAkihiro Suda
 
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバXenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバzgock
 
C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門uchan_nos
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosTomohiro Kumagai
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装Takuya ASADA
 
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までSAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までHitoshi Ikemoto
 
最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみたzaki4649
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争Yosuke Shinya
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマットAkihiro Suda
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方uchan_nos
 

What's hot (20)

UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバXenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバ
 
C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装
 
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までSAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
 
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
 
最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた最近のBurp Suiteについて調べてみた
最近のBurp Suiteについて調べてみた
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 

Similar to ESP8266EXで位置推定

Arduino + rcs620sで遊ぼう
Arduino + rcs620sで遊ぼうArduino + rcs620sで遊ぼう
Arduino + rcs620sで遊ぼうtreby
 
ESP8266をはじめよう
ESP8266をはじめようESP8266をはじめよう
ESP8266をはじめようKei Yoshimura
 
Esp32でiot
Esp32でiotEsp32でiot
Esp32でiotYusuke Kon
 
ESP8266を便利にするモジュールを つくってみた!
ESP8266を便利にするモジュールを つくってみた!ESP8266を便利にするモジュールを つくってみた!
ESP8266を便利にするモジュールを つくってみた!wamisnet
 
Jenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとJenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとKiro Harada
 
Esp8266が便利すぎて 開発ボードを作ってみた話
Esp8266が便利すぎて 開発ボードを作ってみた話Esp8266が便利すぎて 開発ボードを作ってみた話
Esp8266が便利すぎて 開発ボードを作ってみた話wamisnet
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduinofuna3
 
プログラマの為のESP-WROOM-02開発ボード組み立て
プログラマの為のESP-WROOM-02開発ボード組み立てプログラマの為のESP-WROOM-02開発ボード組み立て
プログラマの為のESP-WROOM-02開発ボード組み立てNaoto Miyachi
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobeYamauchi isamu
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めYou&I
 
イチからはじめるUSB Host API
イチからはじめるUSB Host APIイチからはじめるUSB Host API
イチからはじめるUSB Host APIksk sue
 
IoTハンズオン資料(おうちハック)配布用
IoTハンズオン資料(おうちハック)配布用IoTハンズオン資料(おうちハック)配布用
IoTハンズオン資料(おうちハック)配布用Takashi Ariyama
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Tetsuyuki Kobayashi
 
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうAndroidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうksk sue
 
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」Masawo Yamazaki
 

Similar to ESP8266EXで位置推定 (20)

Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
Arduino + rcs620sで遊ぼう
Arduino + rcs620sで遊ぼうArduino + rcs620sで遊ぼう
Arduino + rcs620sで遊ぼう
 
ESP8266をはじめよう
ESP8266をはじめようESP8266をはじめよう
ESP8266をはじめよう
 
Esp32でiot
Esp32でiotEsp32でiot
Esp32でiot
 
ESP8266を便利にするモジュールを つくってみた!
ESP8266を便利にするモジュールを つくってみた!ESP8266を便利にするモジュールを つくってみた!
ESP8266を便利にするモジュールを つくってみた!
 
Jenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとJenkins に XFD を追加してみると
Jenkins に XFD を追加してみると
 
Esp8266が便利すぎて 開発ボードを作ってみた話
Esp8266が便利すぎて 開発ボードを作ってみた話Esp8266が便利すぎて 開発ボードを作ってみた話
Esp8266が便利すぎて 開発ボードを作ってみた話
 
今すぐ始めるArduino
今すぐ始めるArduino今すぐ始めるArduino
今すぐ始めるArduino
 
プログラマの為のESP-WROOM-02開発ボード組み立て
プログラマの為のESP-WROOM-02開発ボード組み立てプログラマの為のESP-WROOM-02開発ボード組み立て
プログラマの為のESP-WROOM-02開発ボード組み立て
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobe
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
 
EeePC901AにDebian導入
EeePC901AにDebian導入EeePC901AにDebian導入
EeePC901AにDebian導入
 
イチからはじめるUSB Host API
イチからはじめるUSB Host APIイチからはじめるUSB Host API
イチからはじめるUSB Host API
 
IoTハンズオン資料(おうちハック)配布用
IoTハンズオン資料(おうちハック)配布用IoTハンズオン資料(おうちハック)配布用
IoTハンズオン資料(おうちハック)配布用
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
 
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうAndroidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃう
 
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
 

More from nishio

量子アニーリングマシンのプログラミング
量子アニーリングマシンのプログラミング量子アニーリングマシンのプログラミング
量子アニーリングマシンのプログラミングnishio
 
夏プロ報告
夏プロ報告夏プロ報告
夏プロ報告nishio
 
ITと経営
ITと経営ITと経営
ITと経営nishio
 
部分観測モンテカルロ計画法を用いたガイスターAI
部分観測モンテカルロ計画法を用いたガイスターAI部分観測モンテカルロ計画法を用いたガイスターAI
部分観測モンテカルロ計画法を用いたガイスターAInishio
 
交渉力について
交渉力について交渉力について
交渉力についてnishio
 
If文から機械学習への道
If文から機械学習への道If文から機械学習への道
If文から機械学習への道nishio
 
組織横断型研究室構想
組織横断型研究室構想組織横断型研究室構想
組織横断型研究室構想nishio
 
2017首都大学東京情報通信特別講義
2017首都大学東京情報通信特別講義2017首都大学東京情報通信特別講義
2017首都大学東京情報通信特別講義nishio
 
強化学習その5
強化学習その5強化学習その5
強化学習その5nishio
 
良いアイデアを出すための方法
良いアイデアを出すための方法良いアイデアを出すための方法
良いアイデアを出すための方法nishio
 
強化学習その4
強化学習その4強化学習その4
強化学習その4nishio
 
強化学習その3
強化学習その3強化学習その3
強化学習その3nishio
 
強化学習その2
強化学習その2強化学習その2
強化学習その2nishio
 
強化学習その1
強化学習その1強化学習その1
強化学習その1nishio
 
線形?非線形?
線形?非線形?線形?非線形?
線形?非線形?nishio
 
機械学習キャンバス0.1
機械学習キャンバス0.1機械学習キャンバス0.1
機械学習キャンバス0.1nishio
 
首都大学東京「情報通信特別講義」2016年西尾担当分
首都大学東京「情報通信特別講義」2016年西尾担当分首都大学東京「情報通信特別講義」2016年西尾担当分
首都大学東京「情報通信特別講義」2016年西尾担当分nishio
 
勾配降下法の 最適化アルゴリズム
勾配降下法の最適化アルゴリズム勾配降下法の最適化アルゴリズム
勾配降下法の 最適化アルゴリズムnishio
 
Wifiで位置推定
Wifiで位置推定Wifiで位置推定
Wifiで位置推定nishio
 
Raspberry Piで Wifiルータを作る
Raspberry PiでWifiルータを作るRaspberry PiでWifiルータを作る
Raspberry Piで Wifiルータを作るnishio
 

More from nishio (20)

量子アニーリングマシンのプログラミング
量子アニーリングマシンのプログラミング量子アニーリングマシンのプログラミング
量子アニーリングマシンのプログラミング
 
夏プロ報告
夏プロ報告夏プロ報告
夏プロ報告
 
ITと経営
ITと経営ITと経営
ITと経営
 
部分観測モンテカルロ計画法を用いたガイスターAI
部分観測モンテカルロ計画法を用いたガイスターAI部分観測モンテカルロ計画法を用いたガイスターAI
部分観測モンテカルロ計画法を用いたガイスターAI
 
交渉力について
交渉力について交渉力について
交渉力について
 
If文から機械学習への道
If文から機械学習への道If文から機械学習への道
If文から機械学習への道
 
組織横断型研究室構想
組織横断型研究室構想組織横断型研究室構想
組織横断型研究室構想
 
2017首都大学東京情報通信特別講義
2017首都大学東京情報通信特別講義2017首都大学東京情報通信特別講義
2017首都大学東京情報通信特別講義
 
強化学習その5
強化学習その5強化学習その5
強化学習その5
 
良いアイデアを出すための方法
良いアイデアを出すための方法良いアイデアを出すための方法
良いアイデアを出すための方法
 
強化学習その4
強化学習その4強化学習その4
強化学習その4
 
強化学習その3
強化学習その3強化学習その3
強化学習その3
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
 
強化学習その1
強化学習その1強化学習その1
強化学習その1
 
線形?非線形?
線形?非線形?線形?非線形?
線形?非線形?
 
機械学習キャンバス0.1
機械学習キャンバス0.1機械学習キャンバス0.1
機械学習キャンバス0.1
 
首都大学東京「情報通信特別講義」2016年西尾担当分
首都大学東京「情報通信特別講義」2016年西尾担当分首都大学東京「情報通信特別講義」2016年西尾担当分
首都大学東京「情報通信特別講義」2016年西尾担当分
 
勾配降下法の 最適化アルゴリズム
勾配降下法の最適化アルゴリズム勾配降下法の最適化アルゴリズム
勾配降下法の 最適化アルゴリズム
 
Wifiで位置推定
Wifiで位置推定Wifiで位置推定
Wifiで位置推定
 
Raspberry Piで Wifiルータを作る
Raspberry PiでWifiルータを作るRaspberry PiでWifiルータを作る
Raspberry Piで Wifiルータを作る
 

Recently uploaded

UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 

Recently uploaded (7)

UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 

ESP8266EXで位置推定