Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IoT推進ラボ ワークショップ

rpaka
December 14, 2018

IoT推進ラボ ワークショップ

企業の方向けに開催したIoT推進ラボワークショップの資料です。
This is presentation material of the workshop held for businessman.

rpaka

December 14, 2018
Tweet

More Decks by rpaka

Other Decks in Programming

Transcript

  1. ͸͡Ίʹ  ਐΊํ ֓ཁͷઆ໌  ࠓճ࡞੒͢ΔϓϩάϥϜͰԿ͕Ͱ͖Δͷ͔ ·ͣŋŋŋ ϓϩάϥϜͷ࡞੒  ࣮ࡍʹखΛಈ͔͠ͳ͕ΒϓϩάϥϜΛ࡞੒

    " ϓϩάϥϜͷ֤෦෼ͷઆ໌ ͲΜͳ͜ͱΛ͢Δ෦෼ͳͷ͔ # ϓϩάϥϛϯά࡞ۀ ༻ҙ͞Ε͍ͯΔϑΝΠϧʹଧͪࠐΈ $ ಈ࡞֬ೝ ܁ Γ ฦ ͠ ࣭໰͸ਵ࣌Ͳ͏ͧ ๻͸΋ͪΖΜɺօ͞ΜͷपΓʹ͍Δ ֶੜ΋͓ख఻͍͠·͢ //*********************** ͜͜ΛຒΊ͍ͯͩ͘͞ //*********************** ϓϩάϥϜ͸݀ຒΊࣜ ࢿྉ͸഑෇ͯ͋͠Γ·͢ ݟਏ͍Օॴ͸͓खݩͷࢿྉͰ֬͝ೝ Լ͍͞
  2. ໨࣍ Ø ͸͡Ίʹ໨࣍༻ޠ  Ø ֓ཁͷઆ໌  Ø ԿΛ͍͔ͨ͠ 

    Ø μετωοτϫʔΫ  Ø શମతͳߏ੒  Ø ϓϩάϥϜᶃͷ࡞੒  Ø 3BTQCFSSZ1Jͷ(1*0ϐϯ  Ø 3BTQCFSSZ1Jͱػثͷ઀ଓ  Ø *$ʹΑΔ௨৴  Ø -JOVYͰͷσόΠεͱͷ௨৴  Ø *$σόΠε͔Βͷσʔλऔಘ  Ø ίʔσΟϯάʢTFOTPSDʣ  Ø ಈ࡞֬ೝʢηϯα͔Βͷσʔλऔಘʣ  Ø ίʔσΟϯάʢEVTUOFUDʣ  Ø ίʔσΟϯάʢNBJODʣ  Ø ϓϩάϥϜᶄͷ࡞੒  Ø ίʔσΟϯάʢ/PUJG1SPDFTTPSQZʣ   Ø ϓϩάϥϜᶅͷ࡞੒  Ø 63* Ø 8FCαʔόͷಇ͖  Ø ϧʔςΟϯά  Ø ඇಉظ௨৴  Ø +40/ Ø -BSBWFM Ø ίʔσΟϯάʢϧʔςΟϯάʣ  Ø ίʔσΟϯάʢ%#+40/ʣ  Ø ϓϩάϥϜᶆͷ࡞੒  Ø ϓϩάϥϜᶅͷΠϯλʔϑΣʔε  Ø $IBSUKT Ø ίʔσΟϯάʢ"QQKTʣ  Ø ಈ࡞֬ೝ  Ø σϞͷ঺հ 
  3. ༻ޠ  ϑΝΠϧ σΟεΫϦϓλ σόΠεϑΝΠϧΛ։͍ͨͱ͖ʹಘΒΕΔ൪߸ σόΠεϑΝΠϧΛ࢖ͬͨॲཧʢηϯαͱͷ௨৴ʣͷࡍʹར༻͢Δ Ϗοτྻ ͷฒͼ ͷฒͼ͕OݸͰ͋Δ͜ͱΛO<CJU>ͱදݱ͢Δ ม਺

    σʔλͷೖΕ෺ ഑ྻ σʔλ͕͍͔ͭ͘ू·ͬͯ࿈ͳ͍ͬͯΔσʔλͷೖΕ෺ %# σʔλϕʔε σʔλͷอ؅৔ॴ 3BTQCFSSZ1J খܕͷίϯϐϡʔλͷҰͭ ࠓճͷϫʔΫγϣοϓͰ͸ηϯα͔Βͷআ๏ͷऔಘͱμετωοτͰͷ௨৴Λ୲͏ Ϛωʔδϟ μετωοτͷ਌ػ Ϟʔτ μετωοτͷࢠػ
  4. μετωοτϫʔΫͱ͸  Ϟʔτ ʢࢠػʣ ਌ػͱෳ਺ͷࢠػͰ࡞Δ ωοτϫʔΫ σʔλΛ΍ΓऔΓ͢ΔͨΊͷಓ࿏ ͷܗঢ়ͷҰछ ŋŋŋ ωοτϫʔΫ

    ਌ػͱશͯͷࢠػ͕௚઀͸ ܨ͕͍ͬͯͳ͍͕ɺଞͷࢠػΛ ܦ༝ͯ͠઀ଓͰ͖Δ ҰຊಓͰ͸ͳͯ͘ɺ৭ʑͳಓΛ ࡞͍ͬͯΔ ϝογϡঢ়ͷωοτϫʔΫ Ϛωʔδϟ ʢ਌ػʣ
  5. શମతͳߏ੒  8&#αʔό͔Β σʔλऔಘɾάϥϑԽ ϒϥ΢β 8&#αʔό %#͔Β σʔλऔಘɾՃ޻ %# ϓϩάϥϜ

     ϓϩάϥϜ  ϓϩάϥϜ  3BTQCFSSZ1J ϓϩάϥϜ  ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ޻ ηϯα 1$ Ϟʔτ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ
  6. ϓϩάϥϜᶃ r ࠓ͔Β࡞੒͢Δ෦෼  8&#αʔό͔Β σʔλऔಘɾάϥϑԽ ϒϥ΢β 8&#αʔό %#͔Β σʔλऔಘɾՃ޻

    %# ϓϩάϥϜ  ϓϩάϥϜ  ϓϩάϥϜ  3BTQCFSSZ1J ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ޻ ηϯα 1$ Ϟʔτ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ ϓϩάϥϜ 
  7. ϓϩάϥϜᶃ r ԿΛ͢ΔϓϩάϥϜͳͷ͔  3BTQCFSSZ1J Ϟʔτ ηϯα ηϯαʹ઀ଓ ίϚϯυൃߦ σʔλऔಘ

     σʔλΛՃ޻ ˠ ઁࢯ ˠ Ϗοτྻ  Ϟʔτʹ઀ଓ ௨৴੍ޚ  Ϟʔτʹσʔλૹ৴ 1$΁ ̐ ϓϩάϥϜ 
  8. *$ʹΑΔ௨৴  ϥζύΠ ηϯα ηϯα ηϯα Y Y Y Ϩδελ

    Ϩδελ Y Y ෳ਺ͷηϯαΛ઀ଓ͠ɼΞυϨεͰ۠ผ ηϯα಺෦ͷϨδελΛΞυϨεͰ۠ผ ʢ͢Δ৔߹΋͋Δʣ ͋͘·Ͱ΋௨৴ํࣜ σʔλͷܗࣜ΍௨৴ͷ಺༰ ͸ηϯαʔͷ࢓༷ʹΑΔ
  9. ϓϩάϥϜᶃͷߏ੒  -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
  10. ϓϩάϥϜᶃͷσΟϨΫτϦߏ଄  3BTQCFSSZ1J TN@DMJC TN@RTM NBJOD NBJOI TFOTPSD TFOTPSI EVTUOFUD

    EVTUOFUI UFTUDUFTUI 3BTQCFSSZ1J EO@ D NBLFGJMF ฤू͢ΔϑΝΠϧ͕ ݸ ͋Γ·͢
  11. ϓϩάϥϜᶃ 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 ϑΝΠϧσΟεΫϦϓλ  σόΠεϑΝΠϧͷར༻४උ ˠ ϑΝΠϧσΟεΫϦϓλΛऔಘ  ΞυϨεΛࢦఆͯ͠઀ଓΛࢼΈΔ  
  12. ϓϩάϥϜᶃ 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ຖʹ෼ׂ  ϑΝΠϧσΟεΫϦϓλɺ෼ׂͨ͠σʔ λɺσʔλͷαΠζΛ౉ͯ͠γεςϜ ίʔϧΛݺͿ    
  13. ϓϩάϥϜᶃ 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
  14. ϓϩάϥϜᶃ 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 ಡΈࠐΉ ΂͖ σʔλαΠζ ฦ஋  ਖ਼ৗͰ͋Ε͹ Τϥʔ͸  ̍ ϑΝΠϧσΟεΫϦϓλɺಡΈࠐΜͩ σʔλͷอଘ༻഑ྻɺಡΈࠐΉσʔλͷ αΠζΛ౉ͯ͠γεςϜίʔϧΛݺͿ
  15. ϓϩάϥϜᶃ 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 ηϯα͔ΒಡΈࠐΜͩԹ౓  ܭଌΛࢦࣔ͢ΔίϚϯυΛൃߦ     ̎ ܭଌʹඞཁͳ࣌ؒͷؒ଴ػ  ܭଌ݁ՌΛಡΈࠐΉ  ුಈখ਺఺਺ʹม׵ ˞อଘͯ͠Լ͍͞
  16. ϓϩάϥϜᶃ 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 ηϯα͔ΒಡΈࠐΜͩর౓  ܭଌΛࢦࣔ͢ΔίϚϯυΛൃߦ    ̎ ܭଌʹඞཁͳ࣌ؒͷؒ଴ػ  ܭଌ݁ՌΛಡΈࠐΉ  ුಈখ਺఺਺ʹม׵  ˞อଘͯ͠Լ͍͞
  17. ϓϩάϥϜᶃ 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ͣͭಡΈࠐΉ  ුಈখ਺఺਺ʹม׵ ˞อଘͯ͠Լ͍͞
  18. ϓϩάϥϜᶃ r ͜͜·Ͱͷ੒Ռ  3BTQCFSSZ1J Ϟʔτ ηϯα ηϯαʹ઀ଓ ίϚϯυൃߦ σʔλऔಘ

     σʔλΛՃ޻ ˠ ઁࢯ ˠ Ϗοτྻ  Ϟʔτʹ઀ଓ ௨৴੍ޚ  Ϟʔτʹσʔλૹ৴ 1$΁ ̐ ϓϩάϥϜ 
  19. ϓϩάϥϜᶃ 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(); /* ... [] ... */ ... [] ... //... [] ... ... [] ... ίϝϯτΛ֎͢
  20. ϓϩάϥϜᶃ r ίʔσΟϯά r EVTUOFUDʢ̍ʣ  void connect_dustnet() { ...

    //************************************************************ if (dn_qsl_connect(NETID, JOINKEY, SRC_PORT, BANDWIDTH_MS)) { //************************************************************ ... EVTUOFUD  ઃఆΛࢦఆͯ͠24-Λݺͼग़͠  DPOOFDU@EVTUOFU ໨త Ϛωʔδϟʹ઀ଓ͢Δ
  21. ϓϩάϥϜᶃ 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ຖʹ෼ׂ
  22. ϓϩάϥϜᶃ 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         ˞อଘͯ͠Լ͍͞
  23. ϓϩάϥϜᶃ 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
  24. ϓϩάϥϜᶃ 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)  ˞อଘͯ͠Լ͍͞
  25. ϓϩάϥϜᶃ 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; }  ϚωʔδϟʹσʔλΛૹ৴Ͱ͖Δ ঢ়ଶ͔ʢ઀ଓ͍ͯ͠Δ͔ʣΛௐ΂Δ        ηϯα͔ΒσʔλΛऔಘ͢Δ  ϚωʔδϟʹσʔλΛૹ৴͢Δ  ͠͹Β͘଴ػ͢Δʢͦͷޙ࠶ͼᶄ΁ʣ  Ϛωʔδϟʹ઀ଓ͢Δ  ηϯαͱͷ઀ଓΛղআ͢Δ ˞อଘͯ͠Լ͍͞
  26. ϓϩάϥϜᶄ r ࠓ͔Β࡞੒͢Δ෦෼  8&#αʔό͔Β σʔλऔಘɾάϥϑԽ ϒϥ΢β 8&#αʔό %#͔Β σʔλऔಘɾՃ޻

    ϓϩάϥϜ  ϓϩάϥϜ  3BTQCFSSZ1J ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ޻ ηϯα Ϟʔτ %# ϓϩάϥϜ  Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ 1$ ϓϩάϥϜ 
  27. ϓϩάϥϜᶄ r ԿΛ͢ΔϓϩάϥϜͳͷ͔  %# ϓϩάϥϜ  1$ Ϛωʔδϟ σʔλऔಘ

    %#ॻ͖ࠐΈ Ϛωʔδϟʹ઀ଓ σʔλऔಘ  %#ॻ͖ࠐΈ 
  28. 1Z4FSJBM 4NBSU.FTI4%, ϓϩάϥϜᶄ r ߏ੒  "QQQZ /PUJG$MJFOUQZ /PUJG1SPDFTTPSQZ Ϟʔτ͔Βͷ௨஌

    .Z42-1ZUIPO$POOFDUPS ઀ଓʹؔ͢Δ৘ใ Ճ޻ͨ͠σʔλ -JOVY ௨஌ ŋŋŋ Ϛωʔδϟ͔Βਵ࣌ૹΒΕͯ͘Δσʔλͷ͜ͱ ˠ Ϟʔτ͔Βͷσʔλૹ৴΍Ϛωʔδϟͷঢ়ଶͳͲෳ਺छྨ͋Γ
  29. ϓϩάϥϜᶄ 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 ුಈখ਺఺਺ʹՃ޻ͨ͠஋  ϏοτྻΛ ୯ਫ਼౓ ුಈখ਺఺਺ͱͯ͠ղऍ
  30.   Ϟʔτ͔ΒૹΒΕͨσʔλΛܭ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
  31. ϓϩάϥϜᶄ r ίʔσΟϯά r /PUJG1SPDFTTPSQZʢ̎ʣ  def writeToMySQL(self, data): ...

    config = { ... } ... #************************************* stmt = "INSERT INTO data_table (`data`) VALUES (?);" cursor.execute(stmt, (data, )) #************************************* ... XSJUF5P.Z42- ໨త .Z42-%#ʹॻ͖ࠐΉ Ҿ਺ EBUB ॻ͖ࠐΉσʔλ ฦ஋   σʔλϕʔε઀ଓͷͨΊͷઃఆ  ̎ σʔλϕʔε઀ଓ ˞վߦແ͠     /PUJG1SPDFTTPSQZ
  32. ϓϩάϥϜᶄ r ίʔσΟϯά r /PUJG1SPDFTTPSQZʢ̎ʣ  def writeToMySQL(self, data): ...

    config = { ... } ... #************************************* stmt = "INSERT INTO data_table (`data`) VALUES (?);" cursor.execute(stmt, (data, )) #************************************* ...  42-จʹΑͬͯσʔλϕʔε Ͱߦ͏ॲཧΛࢦఆ   ॻ͖ࠐΉσʔλΛࢦఆ  ࣮ࡍʹॻ͖ࠐΈॲཧΛߦ͏ ˞վߦແ͠     /PUJG1SPDFTTPSQZ
  33. ϓϩάϥϜᶄ r ίʔσΟϯά r /PUJG1SPDFTTPSQZʢ̎ʣ  INSERT INTO data_table (`data`)

    VALUES (28.55) INSERT INTO data_table (`data`) VALUES ( ) 28.55 .Z42-
  34. ϓϩάϥϜᶄ 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-%#ʹॻ͖ࠐΈ ˞อଘͯ͠Լ͍͞
  35. ϓϩάϥϜᶅ r ࠓ͔Β࡞੒͢Δ෦෼  8&#αʔό͔Β σʔλऔಘɾάϥϑԽ %#͔Β σʔλऔಘɾՃ޻ ϓϩάϥϜ 

    3BTQCFSSZ1J ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ޻ ηϯα Ϟʔτ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ ϒϥ΢β 8&#αʔό %# ϓϩάϥϜ  1$ ϓϩάϥϜ  ϓϩάϥϜ 
  36. 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 ಺༰Λௐ΂Δ ղऍ
  37. ϧʔςΟϯά  IPNF MPHJO OPUJG EBUBBMM EBUBOFX ϒϥ΢β τοϓΛ දࣔ͢Δ

    ϩάΠϯϢʔβ ͷೝূ %#ͷશͯͷ ৘ใΛऔಘ͢Δ %#ͷ৽͍͠ ৘ใΛऔಘ͢Δ ϓϩάϥϜ ॲཧͷબ୒ ʢϧʔςΟϯάʣ 8&#αʔό
  38. +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/
  39. -BSBWFMͱ͸  • 1)1ͷ8&#ϑϨʔϜϫʔΫ • ϑϧελοΫʢػೳຬࡌʣ • .7$ • ಡΈ΍͍͢ɺॻ͖΍͍͢ʢͱݴΘΕΔʣ

    • ಉҙͰ͖ΔʢൺֱతಡΈॻ͖͠΍͍͢ʣ • υΩϡϝϯτ͕๛෋ʢ೔ຊޠ͋Γʣ • ྲྀߦ͍ͬͯΔʢωοτ্ʹ৘ใຬࡌʣ • %*ʢґଘੑ஫ೖʣ • ϑΝαʔυ • σϑΥϧτͰ"NB[PO4ʹ઀ଓ • 7VFKTͱͷ౷߹ ͱͯ΋ศར ػೳຬࡌ͔ͭॳ৺ऀ޲͖ ࢖͏ػೳ͚ͩཧղ͢Ε͹0, Ͱ͖Δ͜ͱଟա͗ʂ ແྉʂ
  40. ϓϩάϥϜᶅ 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.-Έ͍ͨͳ΋ͷ ˞อଘͯ͠Լ͍͞
  41. ϓϩάϥϜᶅ 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/ ϒϥ΢β΁ ˞อଘͯ͠Լ͍͞
  42. ϓϩάϥϜᶆ r ࠓ͔Β࡞੒͢Δ෦෼  8&#αʔό͔Β σʔλऔಘɾάϥϑԽ %#͔Β σʔλऔಘɾՃ޻ ϓϩάϥϜ 

    3BTQCFSSZ1J ϓϩάϥϜ  ௨৴੍ޚ ηϯα͔Β σʔλऔಘɾՃ޻ ηϯα Ϟʔτ Ϛωʔδϟ σʔλऔಘ %#ॻ͖ࠐΈ ϒϥ΢β 8&#αʔό %# ϓϩάϥϜ  1$ ϓϩάϥϜ 
  43. ϓϩάϥϜᶅʢ8&#αʔόʣͷΠϯλʔϑΣʔε  EBUB@UBCMF       

         ŋŋŋ EBUBBMM EBUBOFX\JE^ ˞\JE^Ҏ߱ͷσʔλΛฦ͢ ͜ͷ৔߹͸\JE^ 8&#αʔό %# ϒϥ΢β ϓϩάϥϜ  ϓϩάϥϜ  ˞શͯͷσʔλΛฦ͢
  44. +2VFSZ ϓϩάϥϜᶆ r ߏ੒  "QQKT $IBSUKT 9.-)UUQ3FRVFTU $BOWBT"1* άϥϑนըߋ৽ґཔ

    HFU"MM%BUB HFU/FX%BUB @HFU%BUB ഑ྻ 8&#αʔό͔Β ಘͨσʔλ
  45. ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̍ʣ  function _getData(uri, label, data,

    myChart) { $.ajax({ url: uri, type: "GET", ... "QQKT  ௨৴಺༰ͷઃఆ  @HFU%BUB ໨త 8&#αʔό͔ΒσʔλΛඇಉظͰऔಘ͢Δ Ҿ਺ VSJ σʔλΛऔಘ͢Δ63* MBCFM σʔλͷઆ໌จͷ഑ྻ EBUB σʔλͷ഑ྻ NZ$IBSU άϥϑΛද͢ΦϒδΣΫτ
  46. ϓϩάϥϜᶆ 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)   
  47. ϓϩάϥϜᶆ 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)   
  48. ϓϩάϥϜᶆ 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 άϥϑΛද͢ΦϒδΣΫτ
  49. ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̐ʣ  function initGraph(label, data) {

    ... //*************************** return new Chart(ctx, ***); //*************************** }; "QQKT  άϥϑͷઃఆͷఆٛ  JOJU(SBQI ໨త άϥϑͷॳظԽΛߦ͏ Ҿ਺ MBCFM σʔλͷઆ໌จͷ഑ྻ EBUB σʔλͷ഑ྻ ฦ஋  άϥϑΛද͢ΦϒδΣΫτ Թ౓ηϯα 4)5 র౓ηϯα #) র౓ηϯα 54- graphOption_a  graphOption_m  άϥϑͷ࡞੒
  50. ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̑ʣ  window.onload = function() {

    //*************************************** var label = []; var data = []; var myChart = initGraph(label, data); "QQKT  ഑ྻͳͲͷ४උ  XJOEPXPOMPBE ແ໊ؔ਺ ໨త ॲཧΛܨ͛Δ  ˞ϖʔδͷಡΈࠐΈ͕׬ྃͨ͠ࡍʹϒϥ΢βʹΑΓ͜ͷॲཧ͕ݺͼग़͞ΕΔ  άϥϑͷॳظԽ
  51. ϓϩάϥϜᶆ r ίʔσΟϯά r "QQKTʢ̒ʣ  getAllData(label, data, myChart); window.setInterval(function()

    { getNewData(last_id, label, data, myChart); }, 5 * 1000); //*************************************** } "QQKT  શͯͷσʔλΛऔಘͯ͠άϥϑʹ൓ө   Ҏޙඵ͝ͱʹ৽͍͠σʔλΛ औಘͯ͠άϥϑʹ൓ө  ˞อଘͯ͠Լ͍͞
  52. ಈ࡞֬ೝ  ϓϩάϥϜᶃ ίϯύΠϧ $ cd Desktop/RaspberryPi $ make all

    ϓϩάϥϜᶃ ࣮ߦ $ ./main 3BTQCFSSZ1J main.c ͷςετ༻ίʔυΛίϝϯτΞ΢τ main.c ͷຊ൪༻ίʔυͷίϝϯτΛ֎͢ 1$ ϓϩάϥϜᶄ ࣮ߦ $ cd ... $ python App.py ϓϩάϥϜᶅɾᶆ ࣮ߦ 127.0.0.1 ϒϥ΢βͰ ʹΞΫηε ϞʔτΛࠨଆͷ64#ʹૠ͢ ׬੒ʂ
  53. &/%