Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
iotlt-sap-20180830.pdf
MinoruInachi
August 31, 2018
Technology
0
410
iotlt-sap-20180830.pdf
IoTLT札幌 Vol.4での発表資料です。
MinoruInachi
August 31, 2018
Tweet
Share
More Decks by MinoruInachi
See All by MinoruInachi
Wio LTEで心拍数計測
minoruinachi
0
160
Wio Extension - RTC を MicroPython から使う
minoruinachi
0
1.2k
Pythonとラズパイで ラジコンカーを自動操縦に!
minoruinachi
1
590
LEGO BOOST で大人も遊ぼう! 〜ラズパイカメラ連携編〜
minoruinachi
1
490
M5GOについてちょっと語ってみる
minoruinachi
0
710
M5Stackに手を出そう!
minoruinachi
1
780
Other Decks in Technology
See All in Technology
20230121_BuriKaigi
oyakata2438
0
180
MarvelClient Upgrade 64bit クライアントへの自動アップグレード設定
mitsuru_katoh
0
110
私見「UNIXの考え方」/20230124-kameda-unix-phylosophy
opelab
0
160
GraphQLスキーマ設計の勘所
yukukotani
26
6.1k
DNS権威サーバのクラウドサービス向けに行われた攻撃および対策 / DNS Pseudo-Random Subdomain Attack and mitigations
kazeburo
5
1.2k
「一通りできるようになった」その先の話
hitomi___kt
0
110
Multi-Cloud Gatewayでデータを統治せよ!/ Data Federation with MCG
tutsunom
1
200
PHPのimmutable arrayとは
hnw
1
150
20230123_FinJAWS
takuyay0ne
0
120
AI Builderについて
miyakemito
0
870
Airdrop for Open Source Projects
epicsdao
0
580
インフラ技術基礎勉強会 開催概要
toru_kubota
0
150
Featured
See All Featured
Side Projects
sachag
451
37k
Why Our Code Smells
bkeepers
PRO
326
55k
Building a Modern Day E-commerce SEO Strategy
aleyda
6
4.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
239
19k
How GitHub (no longer) Works
holman
298
140k
Building Better People: How to give real-time feedback that sticks.
wjessup
346
17k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
13
1.1k
Building Applications with DynamoDB
mza
85
5k
Stop Working from a Prison Cell
hatefulcrawdad
263
18k
Navigating Team Friction
lara
176
12k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1.1M
Transcript
͖Έ$)*3*.&/Λ ͍ͬͯΔ͔ʁ
ීஈΤϯλʔϓϥΠζܥͷιϑτΣΞΤϯδχΞ ಀආ׆ಈͱͯ͠ϚΠίϯϘʔυ .JDSP1ZUIPO͖ ࣗݾհ
݄̔͡Ίͷ͋Δ ݄ʹ։࠵͢ΔϋοΧιϯͰ ߨࢣਞͷॲ͕͍ͭͯͳ͍Α͏Ͱ͢ɻ ʻதུʼ ڥϥζϕϦʔύΠʴ$IJSJNFO ʢ*P5ϓϩάϥϛϯάڥʣ ͱ͋Δਓ $IJSJNFO
CHIRIMEN OPEN HARDWARE https://chirimen.org/
$)*3*.&/ͱʁ Σϒϒϥβώτ͕ίϯϐϡʔλωοτϫʔΫΛར༻͢ΔͨΊͷॏཁͳׂ ΛՌ͖ͨͯ͠·ͨ͠ɻ͞Βʹ༷ʑͳΞϓϦέʔγϣϯΛಈ࡞ͤ͞ΔίϯϐϡʔςΟ ϯάϓϥοτϑΥʔϜͱͯ͠ͷׂ૿͍ͯ͠·͢ɻ *P58P5ͱ͍ͬͨίϯηϓτ͕ࣔ͢ɺ͞·͟·ͳϞϊ͕ίϯϐϡʔλωοτ ϫʔΫͰܨ͕Δະདྷͷࣾձʹ͓͍ͯɺࢲͨͪώτॏཁͳଘࡏͰ͢ɻ͕ͨͬ͠ ͯɺώτͱϞϊ͕ΣϒΛհͯ͠ޓ͍ʹڠௐ͋͑͠Δڥ͕ඞཁͰ͢ɻͦͯ͠ɺ ͦΕΣϒϒϥβ֩ʹ࡞ΒΕ͍ͯ͘ͷͳ͍͔ͱߟ͑·͢ɻ ຊϓϩδΣΫτɺ͜ͷΑ͏ͳڥʢϓϥοτϗʔϜʣΛࢀՃऀͷօ͞ΜͱΦʔ ϓϯʹσβΠϯ͠ɺͭ͘Γ͍͋͛ͯ͘͜ͱΛΊ͟͠·͢ɻ·ͨ͜ͷΑ͏ͳࠓޙͷ
৽ͨͳࣾձͰͷlΣϒΒ͠͞zͱԿ͔ɺΣϒΛհͨ͠ΑΓΑ͍ώτɾϞϊͷ ؔͱԿ͔ΛɺσΟεΧογϣϯɺϓϩτλΠϓ੍࡞ɺར༻ɺվྑΛ௨ͯ͠ߟ ͑ɺఏҊ͍͖ͯ͠·͢ɻ 〜from 「ABOUT」
ݯྲྀɺ͋ͷ'JSFGPY04
$)*3*.&/Ϙʔυɿ&DIJHP3FW ݄̕ɺεΠοναΠΤϯε͔Βൢച։࢝ 'JSFGPY04ͷ044൛ɺ#( #PPUUP(FDLP 04͕ಈ࡞ 8FC(1*0"1* 8FC*$"1*ͰηϯαʔΞΫνϡΤʔλʹΞΫηε ։ൃʹ1$Λܨ͍Ͱɺ'JSFGPY্ͷ8FC*%&Λ͏ ݄̍ɺച ೖՙͳ͍ঢ়ଶ͕ଓ͖ɺೖखࠔ
$)*3*.&/GPS3BTQCFSSZ1J ݄ϦϦʔε #(04Ͱͳ͍ɺ'JSFGPYΘͳ͍ 3BTQCJBOͷ্ʹ8FC(1*0"1* 8FC*$"1*Λ࣮ ։ൃʹΦϯϥΠϯ8FCΤσΟλ+4#JO·ͨ+4'JEEMFͷར༻Λఆ
͘͠Έ +4#JO +4'JEEMF ΦϯϥΠϯWebΤσΟλ Web GPUO/I2C API QPMZpMMKT I2C σόΠεAPI
JD"%5KT JD"%5KT JD"%5KT Raspberry Pi 3 / Raspbian Chromium HTML wss://localhost:33330/ WebSocket node srv.js /sys/class/gpio/gpioXX /dev/i2c-1 Raspberry Pi 3 Hardware GPIO I2C
ඪ४αϙʔτ*$σόΠε JD"%4KT "%ίϯόʔλ JD"%5KT Թηϯαʔ JD(1:&KT ֎ઢڑηϯαʔ JD1$"KT 18.αʔϘϞʔλʔυϥΠόʔ JD4KT
Χϥʔηϯαʔ JD7&.-KT 67ηϯαʔ JDDBO[BJCMJOLKT *̎$4MBWFσόΠε։ൃϘʔυ JDHSPWFBDDFMFSPNFUFSKT (SPWFՃηϯαʔ JDHSPWFHFTUVSFKT (SPWFδΣενϟʔηϯαʔ JDHSPWFMJHIUKT (SPWF*$ޫηϯαʔ JDHSPWFPMFE%JTQMBZKT (SPWF0-&%σΟεϓϨΠ JDHSPWFUPVDIKT (SPWFλονηϯαʔ
νϡʔτϦΞϧׂͱॆ࣮ https://github.com/chirimen-oh/chirimen-raspi3/wiki/Tutorial
ݸਓతʹ࣋ͬͯͳ͍σόΠε͔ΓͰّ
ख࣋ͪͷସͰؤுͬͯΈͨ #.& Թɾ࣪ɾؾѹηϯαʔ - ϞʔλʔυϥΠόʔ %"*40ͷ64#ઔ෩ػ
͜͏ͳΔͱɺσʔλγʔτௐΔͷඞਢ #.& Թɾ࣪ɾؾѹηϯαʔ - ϞʔλʔυϥΠόʔ
var BME280 = function(i2cPort,slaveAddress){ this.i2cPort = i2cPort; this.i2cSlave = null;
this.slaveAddress = slaveAddress; }; BME280.prototype = { init: function(){ return new Promise((resolve, reject)=>{ this.i2cPort.open(this.slaveAddress).then((i2cSlave)=>{ this.i2cSlave = i2cSlave; //console.log("init ok:"+this.i2cSlave); this.digT = []; this.digP = []; this.digH = []; this.temp = 0.0; this.pres = 0.0; this.hum = 0.0; this.t_fine = 0.0; var osrs_t = 1; // Temperature oversampling x 1 var osrs_p = 1; // Pressure oversampling x 1 var osrs_h = 1; // Humidity oversampling x 1 var mode = 3; // Normal mode var t_sb = 5; // Tstandby 1000ms var filter = 0; // Filter off var spi3w_en = 0; // 3-wire SPI Disable var ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode; var config_reg = (t_sb << 5) | (filter << 2) | spi3w_en; var ctrl_hum_reg = osrs_h; this.writeReg(0xF2,ctrl_hum_reg) this.writeReg(0xF4,ctrl_meas_reg) this.writeReg(0xF5,config_reg) resolve(); },(err)=>{ reject(err); }); }); }, writeReg: function(reg_address, data){ return new Promise(async (resolve, reject)=>{ if(this.i2cSlave == null){ reject("i2cSlave Address does'nt yet open!"); } else { await this.i2cSlave.write8(reg_address,data); resolve(); } }); }, callibParam: function(){ return new Promise(async (resolve, reject)=>{ if(this.i2cSlave == null){ reject("i2cSlave Address does'nt yet open!"); }else{ var calib = []; for(var i=0x88; i<0x88+24; i++){ calib.push(await this.i2cSlave.read8(i)); } calib.push(await this.i2cSlave.read8(0xA1)); for(i=0xE1; i<0xE1+7; i++){ calib.push(await this.i2cSlave.read8(i)); } this.digT.push((calib[1] << 8) | calib[0]); this.digT.push((calib[3] << 8) | calib[2]); this.digT.push((calib[5] << 8) | calib[4]); this.digP.push((calib[7] << 8) | calib[6]); this.digP.push((calib[9] << 8) | calib[8]); this.digP.push((calib[11]<< 8) | calib[10]); this.digP.push((calib[13]<< 8) | calib[12]); this.digP.push((calib[15]<< 8) | calib[14]); this.digP.push((calib[17]<< 8) | calib[16]); this.digP.push((calib[19]<< 8) | calib[18]); this.digP.push((calib[21]<< 8) | calib[20]); this.digP.push((calib[23]<< 8) | calib[22]); this.digH.push(calib[24]); this.digH.push((calib[26]<< 8) | calib[25]); this.digH.push(calib[27]); this.digH.push((calib[28]<< 4) | (0x0F & calib[29])); this.digH.push((calib[30]<< 4) | ((calib[29] >> 4) & 0x0F)); #.&໘͘͞ա͗
ͱ͜ΖͰʜ
͏͢͏͢ɺ ײ͍ͮͯΔ͔͠Ε·ͤΜ͕ʜ
+4#JO +4'JEEMF ΦϯϥΠϯWebΤσΟλ Web GPUO/I2C API QPMZpMMKT I2C σόΠεAPI JD"%5KT
JD"%5KT JD"%5KT Raspberry Pi 3 / Raspbian Chromium HTML wss://localhost:33330/ WebSocket node srv.js /sys/class/gpio/gpioXX /dev/i2c-1 Raspberry Pi 3 Hardware GPIO I2C Πϯλʔωοτ͚͔ͩ͜͜Αʂ
"NCJFOUʹଌఆσʔλΛ͋͛ͯΈΑ͏ͱࢥͬͨʜ https://ambidata.io/
"NCJFOUʹσʔλΛ͋͛Δํ๏ ͑Δ"1*ແ͔͕ͬͨɺதͰ͍ͬͯΔ͜ͱ ׂͱ؆୯ 3&45GVM"1*ͰσʔλΛ1045͢ΕΑ͍ 63-IUUQBNCJEBUBJPBQJWDIBOOFMTνϟϯωϧ*%EBUB σʔλ CPEZ +40/ܗࣜͰ༩͑Δ \XSJUF,FZϥΠτΩʔ Eσʔλ
Eσʔλ ʜ^ ͳͷͰɺ+BWB4DSJQUͷGFUDIͰ͑Α͍ͷ͔ͱ ҆қʹߟ͑ͨ
͕ͩɺͦΜͳʹ͘ͳ͔ͬͨʂ .JYFE$POUFOU +4#JO+4'JEEMFIUUQT͕ͩ"NCJFOUͷ3&45GVM"1*IUUQͳͷͰ ϦΫΤετ͕ϒϩοΫ͞ΕΔ )5.-ΛϩʔΧϧʹμϯϩʔυͯ͠ಈ͔ͯ͠ճආ ΫϩευϝΠϯ੍ $034 $SPTT0SJHJO3FTPVSDF4IBSJOH Λ͏ʹαʔόଆͷରԠ͕ඞཁ IUUQϔομͷNPEFΛOPDPSTʹͯͯ͠͠Έͨ
$POUFOU5ZQF BQQMJDBUJPOKTPOΛࢦఆͯ͠UFYUQMBJOͰ1045͞Εͯ͠·͏ OPDPSTͰͦ͏͍͏ͷΒ͍͠ μʔςΟͳखஈͰ͋Δ͕ɺɺɺ ϔομΛॻ͖͑Δ$ISPNFϓϥάΠϯΛͬͯ$POUFOU5ZQFΛڧҾʹ BQQMJDBUJPOKTPOʹॻ͖͑ͨ Α͍ࢠ·Ͷͪ͠Όμϝ
None
8FCϒϥβͰ+BWB4DSJQUͬͯ *P5͍ͨ͠ͳΒଞʹબࢶ͋Δ
Mongoose OS https://mongoose-os.com/
obniz https://obniz.io/
·ͱΊ $)*3*.&/'JSFGPY04༝དྷͷٕज़Λ*P5ʹద༻ ͢ΔࢼΈ 8FCϑϩϯτΤϯυ্Ͱ8FC(1*0*$"1*Λͬ ͯηϯαʔʗΞΫνϡΤʔλʹΞΫηε ઐ༻Ϙʔυೖखࠔͳঢ়گ ΘΓʹ3BTQCFSSZ1Jͷ3BTQCJBO্Ͱಈ͘ ͷ͕ग़͍ͯΔ 8FCٕज़ͰϓϩάϥϛϯάͰ͖Δͱݴͬͯ)8 ࣝඞཁ
8P5Λ͏͍ͨͬͯΔׂʹ֎ͱͷ࿈ܞ͕໘ͳͷ ͰɺԿΒ͔ͷվળඞཁͩΖ͏ ͍Ζ͍ΖͱϥΠόϧͬΆ͍ͷग़͖͍ͯͯΔ