Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IoT推進ラボ ワークショップ
Search
rpaka
December 14, 2018
Programming
0
1.1k
IoT推進ラボ ワークショップ
企業の方向けに開催したIoT推進ラボワークショップの資料です。
This is presentation material of the workshop held for businessman.
rpaka
December 14, 2018
Tweet
Share
More Decks by rpaka
See All by rpaka
Driver Authentication for Smart Car Using Wireless Sensing
ritsu2891
0
860
情報家電とネットワーク
ritsu2891
0
1.2k
エネルギーの情報化 -電力のパケット化とルーティング技術-
ritsu2891
0
1.4k
スマートゴミ管理システム
ritsu2891
0
1.3k
The Channel as a Traffic Sensor: Vehicle Detection and Classification Based on Radio Fingerprinting
ritsu2891
0
1.3k
A Little Java, a Few Patterns -Ch.7 Oh, My!-
ritsu2891
0
1.2k
ARSを⽤いたFM-CWレーダーの距離分解能改善に関する検討
ritsu2891
0
1.4k
ARSを⽤いた信号分離性能に関する検討
ritsu2891
0
1.2k
Sensor Fusion for Unobtrusive Respiratory Rate Estimation in Dogs
ritsu2891
0
1.5k
Other Decks in Programming
See All in Programming
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
210
return文におけるstd::moveについて
onihusube
1
1.1k
17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
saitolume
0
250
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
210
nekko cloudにおけるProxmox VE利用事例
irumaru
3
430
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
280
Jakarta EE meets AI
ivargrimstad
0
250
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.3k
php-conference-japan-2024
tasuku43
0
320
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
210
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
5
660
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
Featured
See All Featured
Speed Design
sergeychernyshev
25
670
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Agile that works and the tools we love
rasmusluckow
328
21k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Docker and Python
trallard
42
3.1k
The Cult of Friendly URLs
andyhume
78
6.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Transcript
*P5ϫʔΫγϣοϓ ʢۀʣ ʢۀʣ Ѫݝཱେֶ ใՊֶ෦ใՊֶՊ Ѫݝ*P5ਪਐϥϘ ֶੜνʔϜ খٱอ थ
͡Ίʹ ਐΊํ ֓ཁͷઆ໌ ࠓճ࡞͢ΔϓϩάϥϜͰԿ͕Ͱ͖Δͷ͔ ·ͣŋŋŋ ϓϩάϥϜͷ࡞ ࣮ࡍʹखΛಈ͔͠ͳ͕ΒϓϩάϥϜΛ࡞
" ϓϩάϥϜͷ֤෦ͷઆ໌ ͲΜͳ͜ͱΛ͢Δ෦ͳͷ͔ # ϓϩάϥϛϯά࡞ۀ ༻ҙ͞Ε͍ͯΔϑΝΠϧʹଧͪࠐΈ $ ಈ࡞֬ೝ ܁ Γ ฦ ͠ ࣭ਵ࣌Ͳ͏ͧ ͪΖΜɺօ͞ΜͷपΓʹ͍Δ ֶੜ͓ख͍͠·͢ //*********************** ͜͜ΛຒΊ͍ͯͩ͘͞ //*********************** ϓϩάϥϜ݀ຒΊࣜ ࢿྉͯ͋͠Γ·͢ ݟਏ͍Օॴ͓खݩͷࢿྉͰ֬͝ೝ Լ͍͞
࣍ Ø ͡Ίʹ࣍༻ޠ Ø ֓ཁͷઆ໌ Ø ԿΛ͍͔ͨ͠
Ø μετωοτϫʔΫ Ø શମతͳߏ Ø ϓϩάϥϜᶃͷ࡞ Ø 3BTQCFSSZ1Jͷ(1*0ϐϯ Ø 3BTQCFSSZ1Jͱػثͷଓ Ø *$ʹΑΔ௨৴ Ø -JOVYͰͷσόΠεͱͷ௨৴ Ø *$σόΠε͔Βͷσʔλऔಘ Ø ίʔσΟϯάʢTFOTPSDʣ Ø ಈ࡞֬ೝʢηϯα͔Βͷσʔλऔಘʣ Ø ίʔσΟϯάʢEVTUOFUDʣ Ø ίʔσΟϯάʢNBJODʣ Ø ϓϩάϥϜᶄͷ࡞ Ø ίʔσΟϯάʢ/PUJG1SPDFTTPSQZʣ Ø ϓϩάϥϜᶅͷ࡞ Ø 63* Ø 8FCαʔόͷಇ͖ Ø ϧʔςΟϯά Ø ඇಉظ௨৴ Ø +40/ Ø -BSBWFM Ø ίʔσΟϯάʢϧʔςΟϯάʣ Ø ίʔσΟϯάʢ%#+40/ʣ Ø ϓϩάϥϜᶆͷ࡞ Ø ϓϩάϥϜᶅͷΠϯλʔϑΣʔε Ø $IBSUKT Ø ίʔσΟϯάʢ"QQKTʣ Ø ಈ࡞֬ೝ Ø σϞͷհ
༻ޠ ϑΝΠϧ σΟεΫϦϓλ σόΠεϑΝΠϧΛ։͍ͨͱ͖ʹಘΒΕΔ൪߸ σόΠεϑΝΠϧΛͬͨॲཧʢηϯαͱͷ௨৴ʣͷࡍʹར༻͢Δ Ϗοτྻ ͷฒͼ ͷฒͼ͕OݸͰ͋Δ͜ͱΛO<CJU>ͱදݱ͢Δ ม
σʔλͷೖΕ ྻ σʔλ͕͍͔ͭ͘ू·ͬͯ࿈ͳ͍ͬͯΔσʔλͷೖΕ %# σʔλϕʔε σʔλͷอॴ 3BTQCFSSZ1J খܕͷίϯϐϡʔλͷҰͭ ࠓճͷϫʔΫγϣοϓͰηϯα͔Βͷআ๏ͷऔಘͱμετωοτͰͷ௨৴Λ୲͏ Ϛωʔδϟ μετωοτͷػ Ϟʔτ μετωοτͷࢠػ
֓ཁͷઆ໌
ԿΛ͍͔ͨ͠ 1$ 3BTQCFSSZ1J ηϯα Ϟʔτ Ϛωʔδϟ
μετωοτϫʔΫͱ Ϟʔτ ʢࢠػʣ ػͱෳͷࢠػͰ࡞Δ ωοτϫʔΫ σʔλΛΓऔΓ͢ΔͨΊͷಓ࿏ ͷܗঢ়ͷҰछ ŋŋŋ ωοτϫʔΫ
ػͱશͯͷࢠػ͕ ܨ͕͍ͬͯͳ͍͕ɺଞͷࢠػΛ ܦ༝ͯ͠ଓͰ͖Δ ҰຊಓͰͳͯ͘ɺ৭ʑͳಓΛ ࡞͍ͬͯΔ ϝογϡঢ়ͷωοτϫʔΫ Ϛωʔδϟ ʢػʣ
ిͷಧ͘ൣғ ిͷಧ͘ൣғ μετωοτϫʔΫͷར ػͱશͯͷࢠػ͕ ܨ͕͍ͬͯͳ͍͕ɺଞͷࢠػΛ ܦ༝ͯ͠ଓͰ͖Δ ҰຊಓͰͳͯ͘ɺ৭ʑͳಓΛ ࡞͍ͬͯΔ ൣғΛΧόʔ
ػ ࢠػ ܨ͕Γ͍͢
μετωοτϫʔΫͷར *P5ʹ༗ޮͳߴ৴པੑωοτϫʔΫ ൣғΛΧόʔ ܨ͕Γ͍͢ ফඅిྗ͕ඇৗʹ͍
શମతͳߏ 8&#αʔό͔Β σʔλऔಘɾάϥϑԽ ϒϥβ 8&#αʔό %#͔Β σʔλऔಘɾՃ %# ϓϩάϥϜ
ϓϩάϥϜ ϓϩάϥϜ 3BTQCFSSZ1J ϓϩάϥϜ ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ ηϯα 1$ Ϟʔτ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ
Թηϯα͔Βͷσʔλͷऔಘ ϞʔτͰͷૹ৴ ϓϩάϥϜͷ࡞ ϓϩάϥϜᶃ
ϓϩάϥϜᶃ r ࠓ͔Β࡞͢Δ෦ 8&#αʔό͔Β σʔλऔಘɾάϥϑԽ ϒϥβ 8&#αʔό %#͔Β σʔλऔಘɾՃ
%# ϓϩάϥϜ ϓϩάϥϜ ϓϩάϥϜ 3BTQCFSSZ1J ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ ηϯα 1$ Ϟʔτ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ ϓϩάϥϜ
ϓϩάϥϜᶃ r ԿΛ͢ΔϓϩάϥϜͳͷ͔ 3BTQCFSSZ1J Ϟʔτ ηϯα ηϯαʹଓ ίϚϯυൃߦ σʔλऔಘ
σʔλΛՃ ˠ ઁࢯ ˠ Ϗοτྻ Ϟʔτʹଓ ௨৴੍ޚ Ϟʔτʹσʔλૹ৴ 1$ ̐ ϓϩάϥϜ
3BTQCFSSZ1Jͷ(1*0ϐϯ (1*0ϐϯ ୯७ͳ0/0'' -&%ͷ౮ σΟδλϧ௨৴ ηϯαͷར༻ ֎෦ػثͱͷ࿈ܞ
μετωοτͷϞʔτηϯαͱ3BTQCFSSZ1Jͷଓʢ̍ʣ 3BTQCFSSZ1J *$௨৴ ηϯα Ϟʔτ γϦΞϧ௨৴ 6"35
μετωοτͷϞʔτηϯαͱ3BTQCFSSZ1Jͷଓʢ̎ʣ 3BTQCFSSZ1J Ϟʔτ ηϯα ˞ͥͻ֬͝ೝԼ͍͞
*$ʹΑΔ௨৴ ϥζύΠ ηϯα ηϯα ηϯα Y Y Y Ϩδελ
Ϩδελ Y Y ෳͷηϯαΛଓ͠ɼΞυϨεͰ۠ผ ηϯα෦ͷϨδελΛΞυϨεͰ۠ผ ʢ͢Δ߹͋Δʣ ͋͘·Ͱ௨৴ํࣜ σʔλͷܗࣜ௨৴ͷ༰ ηϯαʔͷ༷ʹΑΔ
-JOVYͰͷσόΠεͱͷ௨৴ 595ϑΝΠϧ 'PPUYU σόΠεϑΝΠϧ *D σόΠεϑΝΠϧΛ։͘ͱ൪߸͕༩͑ΒΕΔ ˠ ϑΝΠϧσΟεΫϦϓλ ͱݺͼɺޙͷॲཧͰར༻
*$σόΠε͔Βͷσʔλऔಘʢ̍ʣ ϓϩάϥϜ read() σόΠεϑΝΠϧ *D ʁ ͍͖ͳΓಡ·ΕͯԿΛฦͨ͠Βྑ͍͔͔Βͳ͍
*$σόΠε͔Βͷσʔλऔಘʢ̎ʣ ϓϩάϥϜ write() σόΠεϑΝΠϧ *D ίϚϯυΛൃߦͯ͠σʔλऔಘ read() ԹσʔλΛଌͬͯԼ͍͞
ϓϩάϥϜᶃͷߏ -JOVY TFUVQ@TFOTPS DMPTF@TFOTPS SFBE@TFOTPS XSJUF@TFOTPS XSJUF@TFOTPS SFBE5FNQ@TIU SFBE*MMVNJOBODF@CI
SFBE*MMVNJOBODF@UTM NBJO ϑΝΠϧσΟεΫϦϓλ ηϯα͔Βͷσʔλ 4NBSU.FTI24- 4NBSU.FTI$-JCSBSZ DPOOFDU@EVTUOFU TFOE@EBUB@EVTUOFU TFOTPSD EVTUOFUD NBJOD
ϓϩάϥϜᶃͷσΟϨΫτϦߏ 3BTQCFSSZ1J TN@DMJC TN@RTM NBJOD NBJOI TFOTPSD TFOTPSI EVTUOFUD
EVTUOFUI UFTUDUFTUI 3BTQCFSSZ1J EO@ D NBLFGJMF ฤू͢ΔϑΝΠϧ͕ ݸ ͋Γ·͢
ϓϩάϥϜᶃ r ίʔσΟϯά r TFOTPSDʢ̍ʣ int setup_sensor(int addr){ //
char* i2c_dev_file = "/dev/i2c-1"; //********************************** int fd = open(i2c_dev_file, O_RDWR); //********************************** TFOTPSD ... //************************************ if (ioctl(fd, I2C_SLAVE, addr) < 0) { //************************************ ... TFUVQ@TFOTPS త ηϯαͷଓΛ͢Δ Ҿ BEES *$ηϯαͷΞυϨε ฦ GE ϑΝΠϧσΟεΫϦϓλ σόΠεϑΝΠϧͷར༻४උ ˠ ϑΝΠϧσΟεΫϦϓλΛऔಘ ΞυϨεΛࢦఆͯ͠ଓΛࢼΈΔ
ϓϩάϥϜᶃ r ίʔσΟϯά r TFOTPSDʢ̎ʣ int write_sensor8(int fd, uint8_t
command){ ... buf[0] = command; //************************************ rtn = write(fd, buf, writesize); //************************************ TFOTPSD int write_sensor16(int fd, uint16_t command){ ... buf[0] = (command >> 8) & 0xff; buf[1] = command & 0xff; //************************************ rtn = write(fd, buf, writesize); //************************************ XSJUF@TFOTPS XSJUF@TFOTPS త ηϯαίϚϯυΛॻ͖ࠐΉ Ҿ GE ϑΝΠϧσΟεΫϦϓλ DPNNBOE ॻ͖ࠐΉίϚϯυ ฦ ਖ਼ৗͰ͋Ε Τϥʔ ॻ͖ࠐΉσʔλΛCJUຖʹׂ ϑΝΠϧσΟεΫϦϓλɺׂͨ͠σʔ λɺσʔλͷαΠζΛͯ͠γεςϜ ίʔϧΛݺͿ
ϓϩάϥϜᶃ r ίʔσΟϯά r TFOTPSDʢ̎ʣ int write_sensor8(int fd, uint8_t
command){ ... buf[0] = command; //************************************ rtn = write(fd, buf, writesize); //************************************ TFOTPSD int write_sensor16(int fd, uint16_t command){ ... buf[0] = (command >> 8) & 0xff; buf[1] = command & 0xff; //************************************ rtn = write(fd, buf, writesize); //************************************ ॻ͖ࠐΉσʔλΛCJUຖʹׂ ˠ ྻͷܗࣜʹ͢Δ 01000001 11100100 0100000111100100 CVG CVG 01000001
ϓϩάϥϜᶃ r ίʔσΟϯά r TFOTPSDʢ̏ʣ int read_sensor(int fd, uint8_t
*buffer, int readsize) { int rtn; if (readsize > 0) { //************************************ rtn = read(fd, buffer, readsize); //************************************ TFOTPSD SFBE@TFOTPS త ηϯα͔ΒσʔλΛಡΈࠐΉ Ҿ GE ϑΝΠϧσΟεΫϦϓλ CVGGFS ಡΈࠐΜͩσʔλͷอଘ༻ྻ SFBETJ[F ಡΈࠐΉ ͖ σʔλαΠζ ฦ ਖ਼ৗͰ͋Ε Τϥʔ ̍ ϑΝΠϧσΟεΫϦϓλɺಡΈࠐΜͩ σʔλͷอଘ༻ྻɺಡΈࠐΉσʔλͷ αΠζΛͯ͠γεςϜίʔϧΛݺͿ
ϓϩάϥϜᶃ r ίʔσΟϯά r TFOTPSDʢ̐ʣ float readTemp_sht31(int fd) {
//************************************ write_sensor16(fd, 0x30A2); write_sensor16(fd, 0x2C0D); //************************************ delay(10); uint8_t buf[10]; TFOTPSD //************************************ read_sensor(fd, buf, 6); //************************************ ... return (float)temp; } SFBE5FNQ@TIU త ηϯα͔ΒԹΛಡΈࠐΉ Ҿ GE ϑΝΠϧσΟεΫϦϓλ ฦ UFNQ ηϯα͔ΒಡΈࠐΜͩԹ ܭଌΛࢦࣔ͢ΔίϚϯυΛൃߦ ̎ ܭଌʹඞཁͳ࣌ؒͷؒػ ܭଌ݁ՌΛಡΈࠐΉ ුಈখʹม ˞อଘͯ͠Լ͍͞
ϓϩάϥϜᶃ r ίʔσΟϯά r TFOTPSDʢ̐ʣ float readIlluminance_bh1750(int fd) {
if (!power_bh1750) { write_sensor8(fd, 0x01); power_bh1750 = 1; } write_sensor8(fd, 0x10); TFOTPSD delay(200); uint8_t buf[2]; read_sensor(fd, buf, 2); ... return illum; } SFBE*MMVNJOBODF@CI త ηϯα͔ΒরΛಡΈࠐΉ Ҿ GE ϑΝΠϧσΟεΫϦϓλ ฦ JMMVN ηϯα͔ΒಡΈࠐΜͩর ܭଌΛࢦࣔ͢ΔίϚϯυΛൃߦ ̎ ܭଌʹඞཁͳ࣌ؒͷؒػ ܭଌ݁ՌΛಡΈࠐΉ ුಈখʹม ˞อଘͯ͠Լ͍͞
ϓϩάϥϜᶃ r ίʔσΟϯά r TFOTPSDʢ̐ʣ float readIlluminance_tsl2561(int fd) {
... if (!power_tsl2561) { ... delay(400); } ... TFOTPSD ... uint16_t illum_byte_line; illum_byte_line = ...; float illum = ...; return illum; } SFBE*MMVNJOBODF@UTM త ηϯα͔ΒরΛಡΈࠐΉ Ҿ GE ϑΝΠϧσΟεΫϦϓλ ฦ JMMVN ηϯα͔ΒಡΈࠐΜͩর ిݯ0/Λࢦࣔͯ͠ܭଌʹඞཁͳ࣌ؒػ ̎ ܭଌ݁ՌΛCJUͣͭಡΈࠐΉ ුಈখʹม ˞อଘͯ͠Լ͍͞
ϓϩάϥϜᶃ r ͜͜·ͰͷՌ 3BTQCFSSZ1J Ϟʔτ ηϯα ηϯαʹଓ ίϚϯυൃߦ σʔλऔಘ
σʔλΛՃ ˠ ઁࢯ ˠ Ϗοτྻ Ϟʔτʹଓ ௨৴੍ޚ Ϟʔτʹσʔλૹ৴ 1$ ̐ ϓϩάϥϜ
ϓϩάϥϜᶃ r ಈ࡞֬ೝʢηϯα͔ΒͷσʔλऔಘͷΈʣ int main(int argc, char** argv){ while
(TRUE) { ***_***(); dn_sleep_ms(DATA_PERIOD_MS); } } NBJOD NBJODΛ࣍ͷΑ͏ʹฤूʢίϝϯτΛ֎͢ʣอଘ ࣮ߦ $ ./main ίϯύΠϧ $ cd Desktop/RaspberryPi $ make sensor_test Թηϯα 4)5 রηϯα #) রηϯα 54- test_sht31(); test_bh1750(); test_tsl2561(); /* ... [] ... */ ... [] ... //... [] ... ... [] ... ίϝϯτΛ֎͢
ϓϩάϥϜᶃ r ίʔσΟϯά r EVTUOFUDʢ̍ʣ void connect_dustnet() { ...
//************************************************************ if (dn_qsl_connect(NETID, JOINKEY, SRC_PORT, BANDWIDTH_MS)) { //************************************************************ ... EVTUOFUD ઃఆΛࢦఆͯ͠24-Λݺͼग़͠ DPOOFDU@EVTUOFU త Ϛωʔδϟʹଓ͢Δ
ϓϩάϥϜᶃ r ίʔσΟϯά r EVTUOFUDʢ̎ʣ void send_data_dustnet(float data) {
... //**************************************************** if (dn_qsl_send(payload, sizeof payload, DEST_PORT)) { //**************************************************** ... EVTUOFUD ׂͨ͠σʔλͱσʔλͷαΠζΛࢦ ఆͯ͠24-Λݺͼग़͠ TFOE@EBUB@EVTUOFU త ϞʔτͰσʔλΛૹΔ Ҿ EBUB ૹΔσʔλ ϞʔτͰૹΔσʔλΛුಈখͷ Ϗοτྻදݱʹม͠ɺCJUຖʹׂ
ϓϩάϥϜᶃ r ίʔσΟϯά r EVTUOFUDʢ̎ʣ void send_data_dustnet(float data) {
... //**************************************************** if (dn_qsl_send(payload, sizeof payload, DEST_PORT)) { //**************************************************** ... EVTUOFUD ϞʔτͰૹΔσʔλΛුಈখͷϏοτྻදݱʹม͠ɺCJUຖʹׂ 01000001 11100100 01100110 01100110 01000001111001000110011001100110 28.55 CJUຖʹׂ ୯ਫ਼ ුಈখ දݱม QBZMPBE ˞อଘͯ͠Լ͍͞
ϓϩάϥϜᶃ r ίʔσΟϯά r NBJODʢ̍ʣ int main(int argc, char**
argv){ // log_info(" ..."); dn_qsl_init(); //*************************** fd = setup_sensor(****_****); //*************************** NBJOD 24-Λݺͼग़ͯ͠μετωοτͷॳظԽॲཧ NBJO త ϞʔτͰσʔλΛૹΔ Ҿ BSHD Ҿͷݸ BSHW Ҿͷ༰ͷྻ ฦ ਖ਼ৗ࣌ Τϥʔ࣌ ηϯαͷॳظԽॲཧΛͯ͠ ϑΝΠϧσΟεΫϦϓλΛಘΔ Թηϯα 4)5 রηϯα #) রηϯα 54- addr_sht31 addr_bh1750 addr_tsl2561
ϓϩάϥϜᶃ r ίʔσΟϯά r NBJODʢ̎ʣ ... while (running) {
if (dn_qsl_isConnected()) { //************************ data = read****_****(fd); //************************ send_data_dustnet(data); NBJOD dn_sleep_ms(DATA_PERIOD_MS); } else { connect_dustnet(); } } close_sensor(fd); return EXIT_SUCCESS; } Թηϯα 4)5 রηϯα #) রηϯα 54- readTemp_sht31(fd) readIlluminance_bh1750(fd) readIlluminance_tsl2561(fd) ˞อଘͯ͠Լ͍͞
ϓϩάϥϜᶃ r ίʔσΟϯά r NBJODʢ̎ʣ ... while (running) {
if (dn_qsl_isConnected()) { //************************ data = read****_****(fd); //************************ send_data_dustnet(data); NBJOD dn_sleep_ms(DATA_PERIOD_MS); } else { connect_dustnet(); } } close_sensor(fd); return EXIT_SUCCESS; } ϚωʔδϟʹσʔλΛૹ৴Ͱ͖Δ ঢ়ଶ͔ʢଓ͍ͯ͠Δ͔ʣΛௐΔ ηϯα͔ΒσʔλΛऔಘ͢Δ ϚωʔδϟʹσʔλΛૹ৴͢Δ ͠Β͘ػ͢Δʢͦͷޙ࠶ͼᶄʣ Ϛωʔδϟʹଓ͢Δ ηϯαͱͷଓΛղআ͢Δ ˞อଘͯ͠Լ͍͞
Ϛωʔδϟ͔Βͷσʔλͷऔಘ %#ͷॻ͖ࠐΈ ϓϩάϥϜͷ࡞ ϓϩάϥϜᶄ
ϓϩάϥϜᶄ r ࠓ͔Β࡞͢Δ෦ 8&#αʔό͔Β σʔλऔಘɾάϥϑԽ ϒϥβ 8&#αʔό %#͔Β σʔλऔಘɾՃ
ϓϩάϥϜ ϓϩάϥϜ 3BTQCFSSZ1J ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ ηϯα Ϟʔτ %# ϓϩάϥϜ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ 1$ ϓϩάϥϜ
ϓϩάϥϜᶄ r ԿΛ͢ΔϓϩάϥϜͳͷ͔ %# ϓϩάϥϜ 1$ Ϛωʔδϟ σʔλऔಘ
%#ॻ͖ࠐΈ Ϛωʔδϟʹଓ σʔλऔಘ %#ॻ͖ࠐΈ
1Z4FSJBM 4NBSU.FTI4%, ϓϩάϥϜᶄ r ߏ "QQQZ /PUJG$MJFOUQZ /PUJG1SPDFTTPSQZ Ϟʔτ͔Βͷ௨
.Z42-1ZUIPO$POOFDUPS ଓʹؔ͢Δใ Ճͨ͠σʔλ -JOVY ௨ ŋŋŋ Ϛωʔδϟ͔Βਵ࣌ૹΒΕͯ͘Δσʔλͷ͜ͱ ˠ Ϟʔτ͔Βͷσʔλૹ৴Ϛωʔδϟͷঢ়ଶͳͲෳछྨ͋Γ
ϓϩάϥϜᶄͷσΟϨΫτϦߏ .BOBHFS MJCT FYUFSOBM@MJCT "QQQZ /PUJG$MJFOUQZ /PUJG1SPDFTTPSQZ ฤू͢ΔϑΝΠϧ͕ ݸ
͋Γ·͢
ϓϩάϥϜᶄ r ίʔσΟϯά r /PUJG1SPDFTTPSQZʢ̍ʣ def byteLineToFloat(self, byteBlockArray): ...
byteLine = (byteBlockArray[0] << 24) + (byteBlockArray[1] << 16) + (byteBlockArray[2] << 8) + (byteBlockArray[3]) data = struct.unpack("<f", struct.pack("<I", byteLine))[0] return data /PUJG1SPDFTTPSQZ CJUͷϏοτྻʹ݁߹ CZUF-JOF5P'MPBU త σʔλΛՃ͢Δ Ҿ CZUF#MPDL "SSBZ CJUຖʹ۠ΒΕͨϏοτྻ ฦ EBUB ුಈখʹՃͨ͠ ϏοτྻΛ ୯ਫ਼ ුಈখͱͯ͠ղऍ
Ϟʔτ͔ΒૹΒΕͨσʔλΛܭCJUͷϏοτྻʹ݁߹͠ɺ ୯ਫ਼ ුಈখ ͱͯ͠ղऍ 28.55 ϓϩάϥϜᶄ r ίʔσΟϯά
r /PUJG1SPDFTTPSQZʢ̍ʣ def byteLineToFloat(self, byteBlockArray): ... byteLine = (byteBlockArray[0] << 24) + (byteBlockArray[1] << 16) + (byteBlockArray[2] << 8) + (byteBlockArray[3]) data = struct.unpack("<f", struct.pack("<I", byteLine))[0] return data 01000001 11100100 01100110 01100110 01000001111001000110011001100110 CJUʹ݁߹ ୯ਫ਼ ුಈখ ม CZUF#MPDL"SSBZ /PUJG1SPDFTTPSQZ
ϓϩάϥϜᶄ r ίʔσΟϯά r /PUJG1SPDFTTPSQZʢ̎ʣ def writeToMySQL(self, data): ...
config = { ... } ... #************************************* stmt = "INSERT INTO data_table (`data`) VALUES (?);" cursor.execute(stmt, (data, )) #************************************* ... XSJUF5P.Z42- త .Z42-%#ʹॻ͖ࠐΉ Ҿ EBUB ॻ͖ࠐΉσʔλ ฦ σʔλϕʔεଓͷͨΊͷઃఆ ̎ σʔλϕʔεଓ ˞վߦແ͠ /PUJG1SPDFTTPSQZ
ϓϩάϥϜᶄ r ίʔσΟϯά r /PUJG1SPDFTTPSQZʢ̎ʣ def writeToMySQL(self, data): ...
config = { ... } ... #************************************* stmt = "INSERT INTO data_table (`data`) VALUES (?);" cursor.execute(stmt, (data, )) #************************************* ... 42-จʹΑͬͯσʔλϕʔε Ͱߦ͏ॲཧΛࢦఆ ॻ͖ࠐΉσʔλΛࢦఆ ࣮ࡍʹॻ͖ࠐΈॲཧΛߦ͏ ˞վߦແ͠ /PUJG1SPDFTTPSQZ
ϓϩάϥϜᶄ r ίʔσΟϯά r /PUJG1SPDFTTPSQZʢ̎ʣ INSERT INTO data_table (`data`)
VALUES (28.55) INSERT INTO data_table (`data`) VALUES ( ) 28.55 .Z42-
ϓϩάϥϜᶄ r ίʔσΟϯά r /PUJG1SPDFTTPSQZʢ̏ʣ def processNotif(self, notif_name, notif_params):
#******************************************************** self.printNotif(notif_name, notif_params) if (notif_name == "notifData"): data = self.byteLineToFloat(notif_params.data) self.writeToMySQL(data) #******************************************************** /PUJG1SPDFTTPSQZ ௨ͷ༰Λදࣔ QSPDFTT/PUJG త ॲཧΛܨ͛Δ Ҿ OPUJG@OBNF ௨ͷ໊લ ฦ OPUJG@QBSBN ௨ʹؔ͢Δσʔλ ୯ਫ਼ ුಈখʹม ˞௨͕དྷͨࡍʹ NotifClient ʹΑΓ͜ͷॲཧ͕ݺͼग़͞ΕΔ .Z42-%#ʹॻ͖ࠐΈ ˞อଘͯ͠Լ͍͞
Ϛωʔδϟ͔Βͷऔಘ %#ͷॻ͖ࠐΈ ϓϩάϥϜͷ࡞ ϓϩάϥϜᶅ
ϓϩάϥϜᶅ r ࠓ͔Β࡞͢Δ෦ 8&#αʔό͔Β σʔλऔಘɾάϥϑԽ %#͔Β σʔλऔಘɾՃ ϓϩάϥϜ
3BTQCFSSZ1J ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ ηϯα Ϟʔτ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ ϒϥβ 8&#αʔό %# ϓϩάϥϜ 1$ ϓϩάϥϜ ϓϩάϥϜ
ϓϩάϥϜᶅ r ԿΛ͢ΔϓϩάϥϜͳͷ͔ ϒϥβ 8&#αʔό %# ϓϩάϥϜ 1$
%#͔Βσʔλऔಘ +40/ܗࣜʹՃ
63* http://www.aichi-pu.ac.jp/about/index.html
8FCαʔόͷಇ͖ʢ̍ʣ ϒϥβ <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8">
<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no- cache"> <meta name="viewport" content="width=device- width,initial-scale=1.0"> <meta name="format-detection" content="telephone=no"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <link href="css/index.css" rel="stylesheet" type="text/css"> <link href="css/index_sp.css" rel="stylesheet" type="text/css" class="sp_view"> <meta name="Keywords" content="5$=4, Aichi Prefectural University, $4, ;%, 6-, ,), APU"> <meta name="Description" content="5$=4&+ 591044# <3'44 / 7*0:94.122!0: &8 0:"( "> <title>5$=4</title> 8FCαʔό ʮJOEFYIUNMʯͷ ϖʔδΛԼ͍͞ɻ 0,Ͱ͢ɻ༰ʮŋŋŋ ݁ہɺจࣈྻΛฦͯ͠Δ͚ͩ *OEFYIUNM ༰ΛௐΔ ղऍ
8FCαʔόͷಇ͖ʢ̎ʣ ϒϥβ 8FCαʔό ʮEBUBBMMʯ ͷϖʔδΛԼ͍͞ɻ 0,Ͱ͢ɻ༰ʮŋŋŋ ͲΜͳจࣈྻͰྑ͍ 'PP #BB
'PP #BB
ϧʔςΟϯά IPNF MPHJO OPUJG EBUBBMM EBUBOFX ϒϥβ τοϓΛ දࣔ͢Δ
ϩάΠϯϢʔβ ͷೝূ %#ͷશͯͷ ใΛऔಘ͢Δ %#ͷ৽͍͠ ใΛऔಘ͢Δ ϓϩάϥϜ ॲཧͷબ ʢϧʔςΟϯάʣ 8&#αʔό
ඇಉظ௨৴ʢ̍ʣ ϒϥβ 8FCαʔό άϥϑશମͦͷͷΛมԽ͢ΔʹૹΔʁ ŋŋŋ ϖʔδશମ͕ॻ͖ΘΔ ˠ ϖʔδ͕ͪΒͭ͘ ˠ
ແବͳ௨৴͕ൃੜ
ඇಉظ௨৴ʢ̎ʣ ϒϥβ 8FCαʔό ৽͍͠ॴ͚ͩॻ͖͑Δ ŋŋŋ ৽͍͠σʔλ͚ͩཪͰऔಘ
ˠϖʔδͷҰ෦ͷΈॻ͖͑ ˠॻ͖ΘΔ෦͚ͩนը
+40/ܗࣜ +BWB4DSJQU 0CKFDU/PUBUJPO { "type" : "Temperature", "from" :
"mote", "mac-addr” : "0x01", "inner-item" : { "child1" : "Jane Smith", "child2" : "123 Maple Street" }, "data" : 24.5, "timestamp” : "2018-10-21 21:12:41 JST" } 1)1 +4 $ 1ZUIPO +BWB • +4ͷΦϒδΣΫτͷจࣈදݱ • ܰྔͳσʔλ • ѻ͍͍͢ɿ৭ʑͳڥͰར༻Մ • ਓͷʹݟ͍͢ • 8&#"1*ͰΑ͘ར༻͞ΕΔ +40/
-BSBWFMͱ • 1)1ͷ8&#ϑϨʔϜϫʔΫ • ϑϧελοΫʢػೳຬࡌʣ • .7$ • ಡΈ͍͢ɺॻ͖͍͢ʢͱݴΘΕΔʣ
• ಉҙͰ͖ΔʢൺֱతಡΈॻ͖͍͢͠ʣ • υΩϡϝϯτ͕๛ʢຊޠ͋Γʣ • ྲྀߦ͍ͬͯΔʢωοτ্ʹใຬࡌʣ • %*ʢґଘੑೖʣ • ϑΝαʔυ • σϑΥϧτͰ"NB[PO4ʹଓ • 7VFKTͱͷ౷߹ ͱͯศར ػೳຬࡌ͔ͭॳ৺ऀ͖ ͏ػೳ͚ͩཧղ͢Ε0, Ͱ͖Δ͜ͱଟա͗ʂ ແྉʂ
ϓϩάϥϜᶅʢ-BSBWFMʣͷσΟϨΫτϦߏ 8&# BQQ %BUB$POUSPMMFSQIQ )UUQ $POUSPMMFST SPVUFT XFCQIQ ŋŋŋ
ฤू͢ΔϑΝΠϧ͕ ݸ ͋Γ·͢
ϓϩάϥϜᶅ r ίʔσΟϯά r ϧʔςΟϯά Route::get('/', function () {
return view('home'); }); Route::get(‘/data/all’, “DataController@all"); Route::get(‘/data/new/{id}', ‘DataController@new'); SPVUFTXFCQIQ ϒϥβ BMM EBUBBMM EBUBOFX\JE^ OFX JE %BUB$POUSPMMFS )PNFCMBEFQIQ )5.-Έ͍ͨͳͷ ˞อଘͯ͠Լ͍͞
ϓϩάϥϜᶅ r ίʔσΟϯά r %#ΞΫηεɾ+40/ܗࣜʹม namespace App¥Http¥Controllers; use Illuminate¥Support¥Facades¥DB;
class DataController { public function all() { $data = DB::table(‘data_table')->get(); return response()->json($data); } public function new($id) { $data = DB::table(‘data_table')->where('id', '>', $id)->get(); return response()->json($data); } } BQQ)UUQ$POUSPMMFST%BUB$POUSPMMFSQIQ நԽ͞Εͨ%#ΞΫηε 42-จΛΒͳͯ͘ྑ͍ +40/ܗࣜͷมҰൃ %# ྻ +40/ ϒϥβ ˞อଘͯ͠Լ͍͞
8&#αʔό͔Βͷσʔλऔಘ άϥϑนը ϓϩάϥϜͷ࡞ ϓϩάϥϜᶆ
ϓϩάϥϜᶆ r ࠓ͔Β࡞͢Δ෦ 8&#αʔό͔Β σʔλऔಘɾάϥϑԽ %#͔Β σʔλऔಘɾՃ ϓϩάϥϜ
3BTQCFSSZ1J ϓϩάϥϜ ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ ηϯα Ϟʔτ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ ϒϥβ 8&#αʔό %# ϓϩάϥϜ 1$ ϓϩάϥϜ
ϓϩάϥϜᶆ r ԿΛ͢ΔϓϩάϥϜͳͷ͔ ϒϥβ 8&#αʔό 1$ 8&#αʔό͔Β σʔλऔಘ
ϓϩάϥϜ άϥϑนը
ϓϩάϥϜᶅʢ8&#αʔόʣͷΠϯλʔϑΣʔε EBUB@UBCMF
ŋŋŋ EBUBBMM EBUBOFX\JE^ ˞\JE^Ҏ߱ͷσʔλΛฦ͢ ͜ͷ߹\JE^ 8&#αʔό %# ϒϥβ ϓϩάϥϜ ϓϩάϥϜ ˞શͯͷσʔλΛฦ͢
+2VFSZ ϓϩάϥϜᶆ r ߏ "QQKT $IBSUKT 9.-)UUQ3FRVFTU $BOWBT"1* άϥϑนըߋ৽ґཔ
HFU"MM%BUB HFU/FX%BUB @HFU%BUB ྻ 8&#αʔό͔Β ಘͨσʔλ
ແঈάϥϑนըϥΠϒϥϦ $IBSUKT
ϓϩάϥϜᶆͷσΟϨΫτϦߏ 8&# QVCMJD "QQKT KT ŋŋŋ $IBSUCVOEMFKT KRVFSZNJOKT ฤू͢ΔϑΝΠϧ͕
ݸ ͋Γ·͢
ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̍ʣ function _getData(uri, label, data,
myChart) { $.ajax({ url: uri, type: "GET", ... "QQKT ௨৴༰ͷઃఆ @HFU%BUB త 8&#αʔό͔ΒσʔλΛඇಉظͰऔಘ͢Δ Ҿ VSJ σʔλΛऔಘ͢Δ63* MBCFM σʔλͷઆ໌จͷྻ EBUB σʔλͷྻ NZ$IBSU άϥϑΛද͢ΦϒδΣΫτ
ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̎ʣ success : function(result) {
... label.push(result[key].datetime); data.push( *** ); id = result[key].id; last_id = id; ... reduceData(data); reduceData(label); myChart.update(); σʔλΛಘͨͱ͖ͷॲཧ σʔλͷઆ໌ʢ͜͜Ͱ࣌ʣͷՃ σʔλͷՃ ࠷৽ͷ*%ΛهԱ "QQKT Թηϯα 4)5 রηϯα #) রηϯα 54- result[key].data normalizeData(result[key].data)
ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̎ʣ success : function(result) {
... label.push(result[key].datetime); data.push( *** ); id = result[key].id; last_id = id; ... reduceData(data); reduceData(label); myChart.update(); άϥϑʹදࣔ͞ΕΔσʔλݸͷௐઅ άϥϑนըͷߋ৽ "QQKT Թηϯα 4)5 রηϯα #) রηϯα 54- result[key].data normalizeData(result[key].data)
ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̏ʣ function getAllData(label, data, myChart
) { //****************************** _getData("/data/all", label, data); //****************************** } function getNewData(id, label, data, myChart) { //****************************** _getData("/data/new/" + id, label, data); //****************************** } HFU"MM%BUB త શͯͷσʔλΛऔಘ͢Δ Ҿ MBCFM σʔλͷઆ໌จͷྻ EBUB σʔλͷྻ NZ$IBSU άϥϑΛද͢ΦϒδΣΫτ ˞վߦແ͠ "QQKT HFU/FX%BUB త ৽͍͠σʔλΛऔಘ͢Δ Ҿ JE औಘ͢Δൣғͷࢦఆ ˞εϥΠυࢀর MBCFM σʔλͷઆ໌จͷྻ EBUB σʔλͷྻ NZ$IBSU άϥϑΛද͢ΦϒδΣΫτ
ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̐ʣ function initGraph(label, data) {
... //*************************** return new Chart(ctx, ***); //*************************** }; "QQKT άϥϑͷઃఆͷఆٛ JOJU(SBQI త άϥϑͷॳظԽΛߦ͏ Ҿ MBCFM σʔλͷઆ໌จͷྻ EBUB σʔλͷྻ ฦ άϥϑΛද͢ΦϒδΣΫτ Թηϯα 4)5 রηϯα #) রηϯα 54- graphOption_a graphOption_m άϥϑͷ࡞
ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̑ʣ window.onload = function() {
//*************************************** var label = []; var data = []; var myChart = initGraph(label, data); "QQKT ྻͳͲͷ४උ XJOEPXPOMPBE ແ໊ؔ త ॲཧΛܨ͛Δ ˞ϖʔδͷಡΈࠐΈ͕ྃͨ͠ࡍʹϒϥβʹΑΓ͜ͷॲཧ͕ݺͼग़͞ΕΔ άϥϑͷॳظԽ
ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̒ʣ getAllData(label, data, myChart); window.setInterval(function()
{ getNewData(last_id, label, data, myChart); }, 5 * 1000); //*************************************** } "QQKT શͯͷσʔλΛऔಘͯ͠άϥϑʹө Ҏޙඵ͝ͱʹ৽͍͠σʔλΛ औಘͯ͠άϥϑʹө ˞อଘͯ͠Լ͍͞
͓ർΕ༷Ͱͨ͠ શͯͷϓϩάϥϜ͕͠·ͨ͠ʂ
ಈ࡞֬ೝ ϓϩάϥϜᶃ ίϯύΠϧ $ cd Desktop/RaspberryPi $ make all
ϓϩάϥϜᶃ ࣮ߦ $ ./main 3BTQCFSSZ1J main.c ͷςετ༻ίʔυΛίϝϯτΞτ main.c ͷຊ൪༻ίʔυͷίϝϯτΛ֎͢ 1$ ϓϩάϥϜᶄ ࣮ߦ $ cd ... $ python App.py ϓϩάϥϜᶅɾᶆ ࣮ߦ 127.0.0.1 ϒϥβͰ ʹΞΫηε ϞʔτΛࠨଆͷ64#ʹૠ͢ ʂ
σϞͷհ ࠓճ࡞ͨ͠ϓϩάϥϜΛجຊʹൃలͤ͞ŋŋŋ 8&#ʹΑΔརศੑͷߴ͍6* ෳηϯαͷσʔλͷಉ࣌ૹ৴ ᮢखಈʹΑΔػثͷ੍ޚ ػثͷঢ়ଶͷදࣔ ŋŋŋΛ࣮ݱͨ͠σϞΛ࡞͠·ͨ͠
&/%