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
MinoruInachi
August 31, 2018
Technology
540
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
340
この夏の散財とRP2040搭載ゲーム機Thumbyを ブレッドボード上で再現してみた話
minoruinachi
0
250
マイコン内蔵LEGOブロック用に カスタムデバイスを繋げてみる (挑戦編)
minoruinachi
0
230
Wio LTEで心拍数計測
minoruinachi
0
320
Wio Extension - RTC を MicroPython から使う
minoruinachi
0
2.1k
Pythonとラズパイで ラジコンカーを自動操縦に!
minoruinachi
1
920
LEGO BOOST で大人も遊ぼう! 〜ラズパイカメラ連携編〜
minoruinachi
1
900
M5GOについてちょっと語ってみる
minoruinachi
0
850
M5Stackに手を出そう!
minoruinachi
1
1k
Other Decks in Technology
See All in Technology
レガシーコードに対する loop engineering的なAI開発プロセス導入について
kubell_hr
0
310
生成AI時代のIAMのマニアックな話
takuros
6
2.9k
お客様の「やりたい」の先を見通す合意形成プロセス ~裏にある課題と不安を解きほぐすコツ~
yukakoseki
0
140
81天的 AI Agent 軟體開發團隊治理實務分享
regionbbs
0
140
Building Audio Plugin Ecosystem for Android in 2026
atsushieno
2
160
自治体AIコンタクトセンター、何をどこに任せる?~Amazon Connect Customer +Amazon Bedrockの実践知~ / 20261107 Satoshi Torano
shift_evolve
PRO
1
120
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
2
350
evcc & Home Assistant
naltatis
0
480
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
5
320
FinOpsを導入してマルチプロダクトのコスト最適化を実現する
kworkdev
PRO
0
140
AIコーディングはじめました
miso
0
160
令和の今、あらためて IAM を考える。アクセスキーを「無くせない現実」との向き合い方
kazzpapa3
0
560
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
580
How GitHub (no longer) Works
holman
316
150k
Documentation Writing (for coders)
carmenintech
77
5.6k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
470
Side Projects
sachag
456
43k
Designing Powerful Visuals for Engaging Learning
tmiket
1
650
From π to Pie charts
rasagy
1
440
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
WENDY [Excerpt]
tessaabrams
14
40k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
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Λ͏͍ͨͬͯΔׂʹ֎ͱͷ࿈ܞ͕໘ͳͷ ͰɺԿΒ͔ͷվળඞཁͩΖ͏ ͍Ζ͍ΖͱϥΠόϧͬΆ͍ͷग़͖͍ͯͯΔ