Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
iotlt-sap-20180830.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
MinoruInachi
August 31, 2018
Technology
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iotlt-sap-20180830.pdf
IoTLT札幌 Vol.4での発表資料です。
MinoruInachi
August 31, 2018
More Decks by MinoruInachi
See All by MinoruInachi
Gateway H2 モジュールで スマートホーム入門
minoruinachi
0
330
この夏の散財とRP2040搭載ゲーム機Thumbyを ブレッドボード上で再現してみた話
minoruinachi
0
250
マイコン内蔵LEGOブロック用に カスタムデバイスを繋げてみる (挑戦編)
minoruinachi
0
230
Wio LTEで心拍数計測
minoruinachi
0
310
Wio Extension - RTC を MicroPython から使う
minoruinachi
0
2.1k
Pythonとラズパイで ラジコンカーを自動操縦に!
minoruinachi
1
910
LEGO BOOST で大人も遊ぼう! 〜ラズパイカメラ連携編〜
minoruinachi
1
890
M5GOについてちょっと語ってみる
minoruinachi
0
850
M5Stackに手を出そう!
minoruinachi
1
1k
Other Decks in Technology
See All in Technology
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
200
How to Design Configuration for Rails Applications
willnet
1
850
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
4
630
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
290
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
450
Running Kotlin + Quarkus with Lambda
nealle
1
4k
古い指輪から広がった JAVA コミュニティ とのつながり
yamad
0
130
野蛮なアジャイル [サイボウズ発!]組織の常識を覆した反骨のスクラム実践記 / Barbaric Agile - Enterprise Agile Study Group
ama_ch
0
110
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
200
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
300
Classmethod Company Deck
satoshi7
1
740
Rust で関数型ドメインモデリング
takonda
0
170
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
550
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
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Λ͏͍ͨͬͯΔׂʹ֎ͱͷ࿈ܞ͕໘ͳͷ ͰɺԿΒ͔ͷվળඞཁͩΖ͏ ͍Ζ͍ΖͱϥΠόϧͬΆ͍ͷग़͖͍ͯͯΔ