first commit
This commit is contained in:
commit
a5a0434432
1126 changed files with 439481 additions and 0 deletions
9
Script/multi_grovepi_installer/README.md
Normal file
9
Script/multi_grovepi_installer/README.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
## **Using Multiple GrovePi**
|
||||
|
||||
The instructions for using multiple GrovePi's can be found here: http://www.dexterindustries.com/GrovePi/engineering/using-multiple-grovepis-together/
|
||||
### Getting Help
|
||||
Need help? We [have a forum here where you can ask questions or make suggestions](http://www.google.com/url?q=http%3A%2F%2Fwww.dexterindustries.com%2FGrovePi%2Fprojects-for-the-raspberry-pi%2F&sa=D&sntz=1&usg=AFQjCNGoiMlC8E9az6mCY2piHsVCl984xg).
|
||||
|
||||
These files have been made available online through a [Creative Commons Attribution-ShareAlike 3.0](http://creativecommons.org/licenses/by-sa/3.0/) license.
|
||||
|
||||
See more at the [GrovePi Site](http://dexterindustries.com/GrovePi/)
|
||||
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr3.cpp.hex
Normal file
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr3.cpp.hex
Normal file
|
|
@ -0,0 +1,864 @@
|
|||
:100000000C9463000C948B000C948B000C948B006C
|
||||
:100010000C948B000C948B000C948B000C948B0034
|
||||
:100020000C948B000C948B000C948B000C948B0024
|
||||
:100030000C948B000C948B000C948B000C948B0014
|
||||
:100040000C94D1130C948B000C94D3150C940F16B4
|
||||
:100050000C948B000C948B000C948B000C948B00F4
|
||||
:100060000C94C1100C948B000000000700020100EA
|
||||
:100070000003040600000000000000000102040864
|
||||
:100080001020408001020408102001020408102002
|
||||
:10009000040404040404040402020202020203032E
|
||||
:1000A00003030303000000002300260029000000D2
|
||||
:1000B0000000250028002B0000000000240027007D
|
||||
:1000C0002A00D00FC41611241FBECFEFD8E0DEBF28
|
||||
:1000D000CDBF11E0A0E0B1E0ECE9F5E302C005908E
|
||||
:1000E0000D92A035B107D9F713E0A0E5B1E001C04A
|
||||
:1000F0001D92AF35B107E1F710E0C6ECD0E004C0C7
|
||||
:100100002297FE010E945119C23CD107C9F70E94F3
|
||||
:100110002A150C94CC1A0C940000CF93DF93EC01B9
|
||||
:1001200060E088810E94D51284E190E00E947D14F5
|
||||
:1001300061E088810E94D51284E190E0DF91CF9147
|
||||
:100140000C947D140F931F93CF93DF93EC01062F34
|
||||
:1001500018E007FF02C061E001C060E089810E94F1
|
||||
:10016000D512CE010E948D00000F115091F7DF9142
|
||||
:10017000CF911F910F910895EF92FF921F93CF930C
|
||||
:10018000DF9300D0CDB7DEB77C01162F27FF02C06A
|
||||
:1001900060EC01C060EE26FF606147FF686046FFCB
|
||||
:1001A000646017FF626016FF6160C70129834A839C
|
||||
:1001B0000E94A2002981622FC7010E94A2004A81E9
|
||||
:1001C000642FC7010E94A200612FC7010F900F90FA
|
||||
:1001D000DF91CF911F91FF90EF900C94A2007F923E
|
||||
:1001E0008F929F92AF92BF92CF92DF92EF92FF9247
|
||||
:1001F0000F931F93CF93DF93EC01162F942E822E33
|
||||
:1002000060E00E94A20060E0CE010E94A20060E0D7
|
||||
:10021000CE010E94A20060E0CE010E94A20083E015
|
||||
:10022000189F7001112467018FEFC81AD80A57016F
|
||||
:1002300082E0A80EB11C712C1FC071120FC0EB819F
|
||||
:10024000FC81EE0DFF1D9082EB81FC81EC0DFD1D0C
|
||||
:100250008082EB81FC81EA0DFB1D0083EB81FC8138
|
||||
:1002600083E0789EE00DF11D11242281418160819F
|
||||
:10027000CE010E94BC0073948A817816F0F260E08F
|
||||
:10028000CE010E94A20060E0CE010E94A20060E0C8
|
||||
:10029000CE010E94A20060E0CE01DF91CF911F91BC
|
||||
:1002A0000F91FF90EF90DF90CF90BF90AF909F9015
|
||||
:1002B0008F907F900C94A2000F931F93CF93DF93A6
|
||||
:1002C000EC01862F688349832A8361E00E949D1296
|
||||
:1002D00061E089810E949D128A8161E070E023E0E3
|
||||
:1002E000829FC00111240E9455198B839C8310E0CA
|
||||
:1002F00008C000E020E040E0612FCE010E94EF0046
|
||||
:100300001F5F8A811817A8F3DF91CF911F910F917A
|
||||
:100310000895FC018281089587EE91E00C94750F99
|
||||
:10032000CF93DF93EC0168E670E087EE91E00E94E6
|
||||
:10033000AE0F60E087EE91E00E94350F87EE91E00E
|
||||
:100340000E94C30F47E050E068E670E087EE91E05E
|
||||
:100350000E94A10F87EE91E00E94B30E382F3695D0
|
||||
:10036000369536953E70232F220F220F230F8F7064
|
||||
:100370009927280F288387EE91E00E94B30E282F3B
|
||||
:1003800022952F708F7099273AE0239F800D1124BA
|
||||
:10039000898387EE91E00E94B30E382F369536950B
|
||||
:1003A00036953670232F220F220F230F8F70992737
|
||||
:1003B000280F2A8387EE91E00E94B30E282F229502
|
||||
:1003C0002F708F7099273AE0239F800D11248B8323
|
||||
:1003D00087EE91E00E94B30E282F22952F708F7028
|
||||
:1003E00099273AE0239F800D11248C8387EE91E0BA
|
||||
:1003F0000E94B30E282F22952F708F7099273AE014
|
||||
:10040000239F800D11248D8387EE91E00E94B30E0F
|
||||
:10041000282F22952F708F7099273AE0239F800D07
|
||||
:1004200011248E831F82DF91CF910895CF93DF93A4
|
||||
:10043000EC01862F688319824A831B822C831E82DB
|
||||
:100440001D8261E00E949D1261E08A81DF91CF915F
|
||||
:100450000C949D121F93CF93DF93EC0160E08A818F
|
||||
:100460000E94D5128AE090E00E947D1414E061E0C1
|
||||
:100470008A810E94D51260E08A810E94D5121150B3
|
||||
:10048000B1F7DF91CF911F910895FF920F931F93C2
|
||||
:10049000CF93DF93EC018B0190E1F92E612F661F62
|
||||
:1004A0006627661F8A810E94D51288810E940C13DC
|
||||
:1004B00061E0892B09F060E088810E94D512000F6D
|
||||
:1004C000111FFA9459F7DF91CF911F910F91FF906F
|
||||
:1004D0000895EF92FF920F931F93CF93DF93EC0158
|
||||
:1004E0007B01CB0193709E838D8360E070E0CE0131
|
||||
:1004F0000E94450200E010E08C81882351F0C70182
|
||||
:10050000002E02C0880F991F0A94E2F791FF0DC0D8
|
||||
:1005100009C0C701002E02C0969587950A94E2F79C
|
||||
:1005200080FF03C06FEF70E002C060E070E0CE01BA
|
||||
:100530000E9445020F5F1F4F0A301105E9F660E087
|
||||
:1005400070E0CE010E94450260E070E0CE010E94A2
|
||||
:100550004502CE01DF91CF911F910F91FF90EF9057
|
||||
:100560000C942A02662321F06B3018F06AE001C077
|
||||
:1005700061E0262F215061E070E002C0660F771F16
|
||||
:100580002A95E2F7FC01258136816227732776835D
|
||||
:1005900065830C946902662321F06B3018F06AE0E1
|
||||
:1005A00001C061E0562F5150FC012581368161E088
|
||||
:1005B00070E002C0660F771F5A95E2F7442319F0E6
|
||||
:1005C000622B732B04C06095709562237323FC012A
|
||||
:1005D000768365830C9469026B3008F06AE02FEF34
|
||||
:1005E0003FEF02C0220F331F6A95E2F72095309546
|
||||
:1005F000FC0136832583B9010C946902FC016483F4
|
||||
:10060000658176810C946902FC018581968108954B
|
||||
:10061000FC0181E020813181232B09F480E00895E1
|
||||
:10062000CF93DF93EC01862F6883498360E00E94BB
|
||||
:100630009D1260E089810E949D1260E088810E9485
|
||||
:10064000D51260E08981DF91CF910C94D51268308A
|
||||
:1006500010F4685F01C06FE0FC016283089561E0FF
|
||||
:10066000FC0181810E949D1282E390E00C947D1434
|
||||
:10067000CF93DF93EC0161E089810E949D1282E3B8
|
||||
:1006800090E00E947D1460E088810E949D1282E3C8
|
||||
:1006900090E00E947D1460E089810E949D1282E3B7
|
||||
:1006A00090E0DF91CF910C947D140F931F93CF9323
|
||||
:1006B000DF93EC01062F18E061E088810E949D1213
|
||||
:1006C00082E390E00E947D1400FF02C060E001C060
|
||||
:1006D00061E089810E949D1282E390E00E947D1476
|
||||
:1006E00060E088810E949D1282E390E00E947D1468
|
||||
:1006F0000695115009F761E088810E949D1260E023
|
||||
:1007000089810E949D1282E390E00E947D1460E046
|
||||
:1007100088810E949D1282E390E00E947D1489816D
|
||||
:100720000E940C13182F811104C061E089810E947E
|
||||
:100730009D1282E390E00E947D1461E088810E9416
|
||||
:100740009D1282E390E00E947D1481E0111101C0AE
|
||||
:1007500080E0DF91CF911F910F910895CF92DF92AA
|
||||
:10076000EF92FF920F931F93CF93DF9300D0CDB7FB
|
||||
:10077000DEB76C01F62EE42E29837A830E942F03C4
|
||||
:1007800060E4C6010E945503C6010E943803C601F9
|
||||
:100790000E942F032981622F63706054C6010E945A
|
||||
:1007A00055030F2D7A81172F06C0F80161918F0133
|
||||
:1007B000C6010E945503802F8F198E15B0F3C60114
|
||||
:1007C0000E943803C6010E942F03F601628160581F
|
||||
:1007D000C6010E945503C6010F900F90DF91CF9183
|
||||
:1007E0001F910F91FF90EF90DF90CF900C94380302
|
||||
:1007F0004F925F926F927F928F929F92AF92BF9231
|
||||
:10080000CF92DF92EF920F931F93CF93DF9300D09D
|
||||
:1008100000D0CDB7DEB73C016B01322F202F8FE027
|
||||
:10082000A82E81E0B82E88248394912C8C0E9D1ED6
|
||||
:10083000F40101E01FE3D5015E904E905D01C60119
|
||||
:10084000B2010E94DD186115710561F4411106C005
|
||||
:10085000002321F08E2F8819833011F4108313C0E8
|
||||
:10086000108211C0DB01AF70BB27A15FBE4F8C911E
|
||||
:100870008083649DC001659D900D749D900D112431
|
||||
:10088000C81AD90A00E0EE2039F08E2F881981307D
|
||||
:1008900019F48081806880833196B7E0AB16B1E0AF
|
||||
:1008A000BB0649F684E090E0831B9109BE016F5FAF
|
||||
:1008B0007F4F680F791F432FC3010E94AE030F9033
|
||||
:1008C0000F900F900F90DF91CF911F910F91EF90AC
|
||||
:1008D000DF90CF90BF90AF909F908F907F906F9060
|
||||
:1008E0005F904F9008956F70E62FF0E0E15FFE4F4C
|
||||
:1008F00080810895FC0181E09081911101C080E028
|
||||
:1009000008951F93CF93DF931F92CDB7DEB7162FB5
|
||||
:1009100087EE91E049830E94750F6CE470E087EEEA
|
||||
:1009200091E00E94AE0F612F87EE91E00E94350F9B
|
||||
:100930004981642F87EE91E00E94350F87EE91E0A8
|
||||
:100940000F90DF91CF911F910C94C30F462F67E05A
|
||||
:100950000C948104462F68E00C948104CF93DF93BC
|
||||
:10096000EC0160E00E94A60460E0CE010E94AA04AF
|
||||
:1009700061E0CE01DF91CF910C94A6044F925F927B
|
||||
:100980006F927F928F929F92AF92BF92CF92DF929F
|
||||
:10099000EF92FF920F931F93CF93DF9300D01F929C
|
||||
:1009A000CDB7DEB75B016A01790180E48B838A836E
|
||||
:1009B00089830E941B142B013C010DC00E941B1453
|
||||
:1009C0006419750986099709653F7140810591058C
|
||||
:1009D00014F080E06EC087EE91E00E94AA0E181617
|
||||
:1009E000190664F387EE91E00E94B30E43E050E0F5
|
||||
:1009F0006CE470E087EE91E00E94A10F0E941B144E
|
||||
:100A00002B013C018E010F5F1F4F48012DC0C80113
|
||||
:100A1000881999090397D4F40E941B142B013C01F7
|
||||
:100A200011C087EE91E00E94B30EF80180830E940E
|
||||
:100A30001B146419750986099709633371058105CB
|
||||
:100A400091053CF6F8018081803458F70E941B1410
|
||||
:100A50000F5F1F4F6419750986099709653F71403B
|
||||
:100A6000810591050CF0B5CF87EE91E00E94AA0EAA
|
||||
:100A7000892B69F69981892F880F880F95FD8D5FE5
|
||||
:100A800085958595F50180839A81892F880F880F38
|
||||
:100A900095FD8D5F85958595F60180839B81892FD6
|
||||
:100AA000880F880F95FD8D5F85958595F70180836B
|
||||
:100AB00081E00F900F900F90DF91CF911F910F91D8
|
||||
:100AC000FF90EF90DF90CF90BF90AF909F908F906E
|
||||
:100AD0007F906F905F904F900895CF93DF93EC01DC
|
||||
:100AE000862F6E834F83288791E09D8760E00E9468
|
||||
:100AF0009D1261E08E810E94D51219861A861B868E
|
||||
:100B00001C86DF91CF910895DF92EF92FF920F93B1
|
||||
:100B10001F93CF93DF93EC0161E08E810E94D51289
|
||||
:100B20006AEF70E080E090E00E9457140E941B146E
|
||||
:100B300009851A852B853C85601771078207930705
|
||||
:100B400020F419861A861B861C862D85211111C05A
|
||||
:100B500009851A852B853C85DC01CB01801B910B17
|
||||
:100B6000A20BB30B803D9740A105B10510F481E0C5
|
||||
:100B700073C01D860E941B1469877A878B879C87A8
|
||||
:100B80001C821B821A821982188261E08E810E9467
|
||||
:100B90009D1260E08E810E94D51264E170E080E0D9
|
||||
:100BA00090E00E945714F89461E08E810E94D51263
|
||||
:100BB00088E290E00E947D1460E08E810E949D1288
|
||||
:100BC000F12CD12C81E009C0E39481E090E00E94F7
|
||||
:100BD0007D148FEFE81204C009C0E12C082F10E04B
|
||||
:100BE0008E810E940C138017910771F38E810E94F1
|
||||
:100BF0000C139FEFE916C9F023E02F1590F4F0FCD9
|
||||
:100C000010C09D2D969596959695FE01E90FF11DC4
|
||||
:100C10009081990F908328852E1510F49160908310
|
||||
:100C2000D394F39495E5F912D8CF789427E22D1553
|
||||
:100C300090F42C8130E04881898190E0840F911DEF
|
||||
:100C40004A81840F911D4B81840F911D992728178C
|
||||
:100C5000390709F48CCF80E0DF91CF911F910F917C
|
||||
:100C6000FF90EF90DF900895EF92FF920F931F9304
|
||||
:100C7000CF93DF93EC010E948405882391F18F814B
|
||||
:100C80008B3029F070F18551823058F507C06881AA
|
||||
:100C900070E080E090E00E94E1172DC0688170E074
|
||||
:100CA00080E090E00E94E11720E030E040E853E46B
|
||||
:100CB0000E946F187B018C01698170E080E090E0F8
|
||||
:100CC0000E94E3179B01AC016E2D7F2D802F912F89
|
||||
:100CD0000E94151720E030E040E251E40E947917AD
|
||||
:100CE0000AC06FE171E084EB92E00E94F71460E0CB
|
||||
:100CF00070E080EC9FE7DF91CF911F910F91FF9003
|
||||
:100D0000EF900895CF92DF92EF92FF920F931F938F
|
||||
:100D1000CF93DF938C01C62F0E948405882309F4AA
|
||||
:100D200077C0F80187818B3039F008F471C08551A4
|
||||
:100D3000823008F06DC01DC0F801628170E080E073
|
||||
:100D400090E00E94E117B62FA72FF82FE92F462F2A
|
||||
:100D5000572F682F792FCB01BA01CC2309F462C039
|
||||
:100D600020E030E040E151E46B2F7A2F8F2F9E2F4F
|
||||
:100D700037C0F801D2816D2F6F7770E080E090E08E
|
||||
:100D80000E94E31720E030E040E853E40E946F182F
|
||||
:100D90006B017C01F801638170E080E090E00E94CB
|
||||
:100DA000E3179B01AC016C2D7D2D8E2D9F2D0E9494
|
||||
:100DB000151720E030E040E251E40E947917472FF8
|
||||
:100DC000382F292F862F942FA32FB22FBC01CD01AE
|
||||
:100DD000D7FD9058CC2331F120E030E040E151E4E0
|
||||
:100DE0000E946F1820E030E040EA50E40E9479173A
|
||||
:100DF00020E030E040E052E40E941517472F382FE2
|
||||
:100E0000292F862F942FA32FB22FBC01CD010AC00A
|
||||
:100E10006FE171E084EB92E00E94F71460E070E013
|
||||
:100E200080EC9FE7DF91CF911F910F91FF90EF90A2
|
||||
:100E3000DF90CF900895CF93DF9322C087EE91E0AB
|
||||
:100E40000E94AA0E049741F4109269011092680161
|
||||
:100E500010926B0110926A01C0916A01D0916B01EE
|
||||
:100E600087EE91E00E94B30EFE01EE0FFF1FE459E2
|
||||
:100E7000FE4F918380832196D0936B01C0936A01CA
|
||||
:100E800087EE91E00E94AA0E892BC1F6DF91CF91E7
|
||||
:100E9000089580916C0190916D01019731F46091FA
|
||||
:100EA000670187EE91E00E94350F80916C0190916F
|
||||
:100EB0006D018330910529F08730910511F0C897B5
|
||||
:100EC00041F443E050E06EE571E087EE91E00E946E
|
||||
:100ED000070F80916C0190916D018830910511F0A0
|
||||
:100EE000449741F444E050E06EE571E087EE91E014
|
||||
:100EF0000E94070F80916C0190916D018E319105D8
|
||||
:100F000011F0889741F449E050E06EE571E087EE1A
|
||||
:100F100091E00C94070F089540E855E260E070E01E
|
||||
:100F200084EB92E00E944A1663E070E087EE91E065
|
||||
:100F30000E94920F6BE177E087EE91E00E94C60F6E
|
||||
:100F400069E477E087EE91E00E94CB0F69E271E0FF
|
||||
:100F500084EB92E00C941615AF92BF92CF92DF9281
|
||||
:100F6000EF92FF920F931F93CF93DF93CDB7DEB72E
|
||||
:100F70002C970FB6F894DEBF0FBECDBF80916A01EB
|
||||
:100F800090916B01049709F0D4C68091680190910B
|
||||
:100F90006901892B09F0CDC681E090E09093690149
|
||||
:100FA0008093680180916C0190916D01019731F4FB
|
||||
:100FB00080916E010E940C138093670180916C01F7
|
||||
:100FC00090916D01029731F46091700180916E01F2
|
||||
:100FD0000E94D51280916C0190916D010397A9F444
|
||||
:100FE00080916E010E94F11190935D0180935C01EC
|
||||
:100FF0009C0197FF02C021503F4F30935F0160E09A
|
||||
:1010000071E00E94DD188093600180916C019091E5
|
||||
:101010006D01049741F460917001709171018091AC
|
||||
:101020006E010E94121280916C0190916D010597E2
|
||||
:1010300031F46091700180916E010E949D12809147
|
||||
:101040006C0190916D01079709F042C080916E018B
|
||||
:1010500090916F01809352019093530161E00E943F
|
||||
:101060009D1260E0809152010E94D51282E090E0D2
|
||||
:101070000E947D1461E0809152010E94D51285E0AA
|
||||
:1010800090E00E947D1460E0809152010E94D51290
|
||||
:1010900060E0809152010E949D1220E432E44FE012
|
||||
:1010A00050E061E0809152010E9435132AE330E064
|
||||
:1010B00040E050E00E941319CA01B90120E031E07C
|
||||
:1010C00040E050E00E94131920935F01609360019B
|
||||
:1010D00080916C0190916D018830910539F481E027
|
||||
:1010E00080935F0182E08093600121C0449709F5FD
|
||||
:1010F00080915B01811107C086EE91E00E94AE04F1
|
||||
:1011000081E080935B0129E531E048E551E067E546
|
||||
:1011100071E086EE91E00E94BE04809157018093B9
|
||||
:101120005F01809158018093600180915901809303
|
||||
:10113000610180916C0190916D014E9769F58091EC
|
||||
:101140005A01811107C08EED91E00E948C0181E06F
|
||||
:1011500080935A018EED91E00E9490018091E00110
|
||||
:1011600080935F018091DF01809360018091DE01B7
|
||||
:10117000809361018091E301809362018091E2019B
|
||||
:10118000809363019091E4019093640180936501E1
|
||||
:101190008091E1018093660180916C0190916D01D5
|
||||
:1011A000889709F059C08091700190917101009762
|
||||
:1011B00019F426E04BE005C08130910549F426E0A2
|
||||
:1011C00046E160916E0180ED91E00E946D0508C0DE
|
||||
:1011D0008230910519F426E045E1F3CF0397D9F366
|
||||
:1011E00060E080ED91E00E94820669877A878B87B4
|
||||
:1011F0009C8780ED91E00E9434066D837E838F830F
|
||||
:1012000098871092510110925001FE01399680E0AA
|
||||
:1012100090E001962191DC01A25ABE4F2C938430BC
|
||||
:101220009105BCF384E090E09093510180935001CC
|
||||
:101230000196DC01A25ABE4FE5E0F0E0EC0FFD1F85
|
||||
:10124000E80FF91F359720812C938830910584F39E
|
||||
:10125000909351018093500180916C0190916D01A8
|
||||
:10126000C297D9F480916E0190916F01482F21E0CF
|
||||
:101270006091700170917101672B09F420E0642F77
|
||||
:101280006F5FFC01329737E03E9FC0013F9F900D9A
|
||||
:1012900011248A559E4F0E94160280916C019091F4
|
||||
:1012A0006D01C39791F420916E0130916F0122502E
|
||||
:1012B000310947E0429FC001439F900D11248A5598
|
||||
:1012C0009E4F0E94080381116AC380916C01909126
|
||||
:1012D0006D01C49791F420916E0130916F012250FD
|
||||
:1012E000310917E0129FC001139F900D11248A55F8
|
||||
:1012F0009E4F0E94080381116BC380916C019091F5
|
||||
:101300006D01C59791F420916E0130916F012250CB
|
||||
:10131000310947E0429FC001439F900D11248A5537
|
||||
:101320009E4F0E940803811165C380916C019091CA
|
||||
:101330006D01C69791F420916E0130916F0122509A
|
||||
:10134000310917E0129FC001139F900D11248A5597
|
||||
:101350009E4F0E940803811168C380916C01909197
|
||||
:101360006D01C79791F420916E0130916F01225069
|
||||
:10137000310917E0129FC001139F900D11248A5567
|
||||
:101380009E4F0E940803811162C380916C0190916D
|
||||
:101390006D01C89791F420916E0130916F01225038
|
||||
:1013A000310917E0129FC001139F900D11248A5537
|
||||
:1013B0009E4F0E940803811163C380916C0190913C
|
||||
:1013C0006D018634910591F460916E0170916F0109
|
||||
:1013D000462F4F5F9B0122503109C901880F991F89
|
||||
:1013E000820F931F8C569E4F0E94100380916C01B8
|
||||
:1013F00090916D018734910589F420916E013091AF
|
||||
:101400006F0122503109C901880F991F820F931F64
|
||||
:101410008C569E4F0E947A04811146C380916C01C4
|
||||
:1014200090916D018834910589F420916E0130917D
|
||||
:101430006F0122503109C901880F991F820F931F34
|
||||
:101440008C569E4F0E947A04811140C380916C019A
|
||||
:1014500090916D018934910589F420916E0130914C
|
||||
:101460006F0122503109C901880F991F820F931F04
|
||||
:101470008C569E4F0E947A04811145C380916C0165
|
||||
:1014800090916D018A34910589F420916E0130911B
|
||||
:101490006F0122503109C901880F991F820F931FD4
|
||||
:1014A0008C569E4F0E947A0481114AC380916C0130
|
||||
:1014B00090916D018B34910589F420916E013091EA
|
||||
:1014C0006F0122503109C901880F991F820F931FA4
|
||||
:1014D0008C569E4F0E947A0481115AC380916C01F0
|
||||
:1014E00090916D018C34910589F420916E013091B9
|
||||
:1014F0006F0122503109C901880F991F820F931F74
|
||||
:101500008C569E4F0E947A0481115BC380916C01BE
|
||||
:1015100090916D018D349105A9F520916E01309166
|
||||
:101520006F0122503109C901880F991F820F931F43
|
||||
:101530008C569E4F0E947A048111BBC323C0812F19
|
||||
:101540000E94F111BC0120916E0130916F01225077
|
||||
:101550003109C901880F991F820F931FE12C00E008
|
||||
:1015600024E040E08C569E4F0E94F8036AEF70E042
|
||||
:1015700080E090E00E9457142FEFC21AD20ACA14DA
|
||||
:10158000DB04ECF280916C0190916D018E34910539
|
||||
:1015900089F420916E0130916F0122503109C90107
|
||||
:1015A000880F991F820F931F8C569E4F0E947A04BA
|
||||
:1015B00081118CC380916C0190916D018F349105E4
|
||||
:1015C00089F420916E0130916F0122503109C901D7
|
||||
:1015D000880F991F820F931F8C569E4F0E947A048A
|
||||
:1015E00081118EC380916C0190916D018A359105B6
|
||||
:1015F00069F480916E018093540180917001809311
|
||||
:101600005501809172018093560118C08B35910568
|
||||
:10161000A9F460916E0170916F01462F4F5F9B019D
|
||||
:101620002250310955E0529FC001539F900D112463
|
||||
:10163000209170018A589E4F0E945C0180916C013C
|
||||
:1016400090916D018C35910549F080916C019091DC
|
||||
:101650006D018D35910509F0BDC048C060916E01E6
|
||||
:1016600070916F01462F4F5F9B012250310955E069
|
||||
:10167000529FC001539F900D1124209170018A58F0
|
||||
:101680009E4F0E945C01009172011091730102FB58
|
||||
:10169000DD24D0F8D19401FBCC24C0F8C1940170B2
|
||||
:1016A0001127102F1195E12CF12CA5E0BA2E16C0B0
|
||||
:1016B00060916E0170916F0162507109B69EC00118
|
||||
:1016C000B79E900D1124012F2C2D4D2D6E2D8A5873
|
||||
:1016D0009E4F0E94EF003FEFE31AF30A80917001E2
|
||||
:1016E00090917101E816F9061CF3AFCF20917001BB
|
||||
:1016F0003091710180916E0190916F01232BB1F4B3
|
||||
:101700009C012250310945E0429FC001439F900D4A
|
||||
:10171000112400915601209155014091540160918E
|
||||
:1017200072018A589E4F0E94EF0054C09C012250C3
|
||||
:10173000310945E0429FC001439F900D11248A5812
|
||||
:101740009E4F0E948901E12CF12CC82ED12C15E06E
|
||||
:101750003DC020917001309171012130310541F47B
|
||||
:101760008091720190917301E816F906B1F42BC0D3
|
||||
:101770002230310541F480917201909173018E15F0
|
||||
:101780009F055CF420C023303105E9F4809172019B
|
||||
:1017900090917301E816F906B4F020916E01309132
|
||||
:1017A0006F0122503109129FC001139F900D112427
|
||||
:1017B0000091560120915501409154016E2D8A5897
|
||||
:1017C0009E4F0E94EF008FEFE81AF80AEC14FD0418
|
||||
:1017D0000CF4BFCF80916C0190916D018E35910515
|
||||
:1017E00049F080916C0190916D018F35910509F060
|
||||
:1017F000A0C252C08091720190917301181619060F
|
||||
:1018000034F081E090E09093730180937201209115
|
||||
:101810006E0130916F012250310945E0429FC001B5
|
||||
:10182000439F900D11248A589E4F0E948901E09099
|
||||
:101830007001F0907101C82ED12C15E029C0809163
|
||||
:101840007001909171019701281B390BC9016091BA
|
||||
:101850007201709173010E94DD18892BB1F42091FF
|
||||
:101860006E0130916F0122503109129FC001139F08
|
||||
:10187000900D112400915601209155014091540181
|
||||
:101880006E2D8A589E4F0E94EF003FEFE31AF30A35
|
||||
:10189000EC14FD04A4F2A5CF20916E0130916F01EC
|
||||
:1018A0002250310945E0429FC001439F900D112411
|
||||
:1018B0008A589E4F0E9489012091720130917301D4
|
||||
:1018C000232B59F133C080917001909171012091C7
|
||||
:1018D0006E0130916F0122503109E816F90664F467
|
||||
:1018E000129FC001139F900D112400915601209169
|
||||
:1018F00055014091540108C0129FC001139F900DE3
|
||||
:10190000112400E020E040E06E2D8A589E4F0E9496
|
||||
:10191000EF008FEFE81AF80A05C0E12CF12CC82E71
|
||||
:10192000D12C15E0EC14FD0474F203C2C82ED12CA6
|
||||
:10193000760115E030C0809170019091710196019F
|
||||
:10194000281B390B80916E0190916F01E216F3060E
|
||||
:101950007CF09C0122503109129FC001139F900D11
|
||||
:1019600011240091560120915501409154010BC062
|
||||
:101970009C0122503109129FC001139F900D112428
|
||||
:1019800000E020E040E06E2D8A589E4F0E94EF005C
|
||||
:1019900021E0E21AF108E114F10469F6CAC161E03C
|
||||
:1019A0008091700190917101892B09F460E0209180
|
||||
:1019B0006E0130916F012250310947E0429FC00112
|
||||
:1019C000439F900D11248A559E4F0E94FE027DCCAC
|
||||
:1019D00020916E0130916F0122503109129FC00198
|
||||
:1019E000139F900D1124609170018A559E4F0E94A3
|
||||
:1019F000EC0283CC41E08091720190917301892BBC
|
||||
:101A000009F440E020916E0130916F0122503109BC
|
||||
:101A100057E0529FC001539F900D112460917001B7
|
||||
:101A20008A559E4F0E94CB0280CC20916E0130914E
|
||||
:101A30006F0122503109129FC001139F900D112494
|
||||
:101A4000609170018A559E4F0E94B20286CC90919F
|
||||
:101A5000720180E0609170017091710168277927AF
|
||||
:101A600020916E0130916F0122503109129FC00107
|
||||
:101A7000139F900D11248A559E4F0E94690285CCB8
|
||||
:101A800020916E0130916F0122503109129FC001E7
|
||||
:101A9000139F900D11248A559E4F0E94040380933A
|
||||
:101AA0005F019093600189CC20916E0130916F01AC
|
||||
:101AB00022503109C901880F991F820F931F60912D
|
||||
:101AC00070018C569E4F0E942703A8CC9091720102
|
||||
:101AD00080E06091700170917101682779272091F1
|
||||
:101AE0006E0130916F0122503109C901880F991F91
|
||||
:101AF000820F931FE12C00E024E040E08C569E4FC3
|
||||
:101B00000E94F803A3CC9091720180E06091700173
|
||||
:101B1000709171016827792720916E0130916F01D2
|
||||
:101B200022503109C901880F991F820F931FE12CA0
|
||||
:101B300000E024E041E08C569E4F0E94F8039ECCCA
|
||||
:101B400020916E0130916F0122503109C901880F37
|
||||
:101B5000991F820F931F609172018C569E4F0E94B5
|
||||
:101B60007304898320916E0130916F0122503109F5
|
||||
:101B7000C901880F991F820F931F2091700141E0C6
|
||||
:101B8000BE016F5F7F4F8C569E4F0E94AE038ECC7E
|
||||
:101B900080917201898320916E0130916F012250F2
|
||||
:101BA0003109C901880F991F820F931F209170017D
|
||||
:101BB00041E0BE016F5F7F4F8C569E4F0E94AE0387
|
||||
:101BC0008DCC80917001909171010AE010E0B80114
|
||||
:101BD0000E94DD1820916E0130916F012250310971
|
||||
:101BE000C901880F991F820F931F8C569E4F0E9428
|
||||
:101BF000730489838091700190917101B8010E94F2
|
||||
:101C0000DD1820916E0130916F0122503109A90138
|
||||
:101C1000440F551F420F531F682FCA018C569E4F09
|
||||
:101C20000E94730480688A8380917201909173018D
|
||||
:101C3000B8010E94DD1820916E0130916F01225091
|
||||
:101C40003109C901880F991F820F931F8C569E4F2F
|
||||
:101C50000E9473048B838091720190917301B8018B
|
||||
:101C60000E94DD1820916E0130916F0122503109E0
|
||||
:101C7000A901440F551F420F531F682FCA018C56EC
|
||||
:101C80009E4F0E9473048C8320916E0130916F01EE
|
||||
:101C900022503109C901880F991F820F931F20E03C
|
||||
:101CA00044E0BE016F5F7F4F8C569E4F0E94AE0393
|
||||
:101CB0002DCC10917001A0907201B0907301AA0C0C
|
||||
:101CC000BB1CAA0CBB1CC12CD12C59CC8FEF898317
|
||||
:101CD0008A838B838C8320916E0130916F01225017
|
||||
:101CE0003109C901880F991F820F931F20E044E03A
|
||||
:101CF000BE016F5F7F4F8C569E4F0E94AE035ACC41
|
||||
:101D000019821A821B821C8220916E0130916F0110
|
||||
:101D100022503109C901880F991F820F931F20E0BB
|
||||
:101D200044E0BE016F5F7F4F8C569E4F0E94AE0312
|
||||
:101D300059CC2C960FB6F894DEBF0FBECDBFDF9105
|
||||
:101D4000CF911F910F91FF90EF90DF90CF90BF90B8
|
||||
:101D5000AF90089520911B0230E080911C02281B57
|
||||
:101D60003109C901089580911C0290911B028917C5
|
||||
:101D700050F4E82FF0E0E35EFD4F208130E08F5F0C
|
||||
:101D800080931C0202C02FEF3FEFC9010895E0913C
|
||||
:101D90001C0280911B02E81730F4F0E0E35EFD4F77
|
||||
:101DA000208130E002C02FEF3FEFC9010895089570
|
||||
:101DB000E091F301F091F4013097E1F030911C02D1
|
||||
:101DC00020911B023217B0F040E009C0DC01A20FE5
|
||||
:101DD000B31F5C91D901A35EBD4F5C934F5F242F6D
|
||||
:101DE00030E02617370794F310921C0260931B0211
|
||||
:101DF000CB0109940895E091F501F091F601309737
|
||||
:101E000029F01092F9011092F80109940895CF92E7
|
||||
:101E1000DF92EF92FF920F931F93CF93DF937C019A
|
||||
:101E2000CB018A012091F701222391F0EB016B0194
|
||||
:101E3000C40ED51E09C06991D701ED91FC910190A6
|
||||
:101E4000F081E02DC7010995CC15DD05A1F703C090
|
||||
:101E5000642F0E948E10C801DF91CF911F910F91C6
|
||||
:101E6000FF90EF90DF90CF900895CF93DF931F9274
|
||||
:101E7000CDB7DEB769832091F7012223D1F02091FD
|
||||
:101E8000F801203240F021E030E0FC01338322836E
|
||||
:101E900020E030E015C08091F901E82FF0E0E65035
|
||||
:101EA000FE4F998190838F5F8093F9018093F801B1
|
||||
:101EB00005C061E0CE0101960E948E1021E030E065
|
||||
:101EC000C9010F90DF91CF910895FC011382128216
|
||||
:101ED00048EE53E060E070E0448355836683778387
|
||||
:101EE00084E391E091838083089510921C02109204
|
||||
:101EF0001B021092F9011092F8010C94D40FCF93A9
|
||||
:101F0000DF93EC01862F0E94F20F8BEF9EE00E9480
|
||||
:101F1000AC1088ED9EE00E94A710CE01DF91CF911A
|
||||
:101F20000C94750F0C947F0F862F413208F040E21D
|
||||
:101F30006DE172E00E94F60F10921C0280931B026A
|
||||
:101F4000089521E00C94940F81E08093F701609351
|
||||
:101F50001A021092F9011092F80108950C94A40F3E
|
||||
:101F60000F93062F21E04091F8016AEF71E0809114
|
||||
:101F70001A020E943B101092F9011092F80110927F
|
||||
:101F8000F7010F91089561E00C94B00F7093F40184
|
||||
:101F90006093F30108957093F6016093F50108953D
|
||||
:101FA00087EE91E00C94650F1092460281E08093D9
|
||||
:101FB00044021092430261E082E10E94D51261E086
|
||||
:101FC00083E10E94D512E9EBF0E080818E7F80836F
|
||||
:101FD00080818D7F808382E08093B80085E4809348
|
||||
:101FE000BC000895880F8093BA000895413208F02C
|
||||
:101FF0003FC0909146029111FCCF91E09093460230
|
||||
:10200000209344022FEF20933D0210924202242F8E
|
||||
:102010002150209341029093450290914502880FF0
|
||||
:10202000892B8093450280914302813041F41092C4
|
||||
:102030004302809145028093BB0085EC01C085EE90
|
||||
:102040008093BC00809146028130E1F3809142028E
|
||||
:10205000841710F44091420227E432E0FB01D901D9
|
||||
:1020600002C08D9181938A2F821B8417D0F301C007
|
||||
:1020700040E0842F08950F93413208F046C09091BC
|
||||
:1020800046029111FCCF92E09093460200934402E5
|
||||
:102090009FEF90933D021092420240934102FB0158
|
||||
:1020A00067E472E0DB0102C091919D939A2F961B29
|
||||
:1020B0009417D0F31092450290914502880F892B16
|
||||
:1020C0008093450280914302813041F41092430293
|
||||
:1020D000809145028093BB0085EC01C085EE809322
|
||||
:1020E000BC00222321F0809146028230E1F38091EE
|
||||
:1020F0003D028F3F61F080913D02803251F080912E
|
||||
:102100003D02803341F483E007C081E005C080E0F8
|
||||
:1021100003C082E001C084E00F910895613298F419
|
||||
:1021200020914602243089F460933F02FC0187E647
|
||||
:1021300092E0DC0102C021912D932A2F281B261743
|
||||
:10214000D0F380E0089581E0089582E008959093AF
|
||||
:10215000880280938702089590938A02809389026F
|
||||
:10216000089585ED8093BC008091BC0084FDFCCF78
|
||||
:1021700010924602089585EC8093BC0010924602AE
|
||||
:1021800008951F920F920FB60F9211242F933F9331
|
||||
:102190004F935F936F937F938F939F93AF93BF936F
|
||||
:1021A000EF93FF938091B900887F803609F49FC038
|
||||
:1021B00058F5883209F45BC090F4803109F452C0BC
|
||||
:1021C00038F4882309F4F8C0883009F0F9C04AC00F
|
||||
:1021D000883109F44CC0803209F0F2C05CC0803410
|
||||
:1021E00009F46BC038F4803309F455C0883309F022
|
||||
:1021F000E7C054C0803509F454C0883509F462C082
|
||||
:10220000883409F0DDC0DAC0883909F4CBC0A8F4FD
|
||||
:10221000883709F46CC038F4883609F468C0803710
|
||||
:1022200009F0CEC064C0883809F4BCC0803909F414
|
||||
:1022300064C0803809F0C4C060C0803B09F48AC023
|
||||
:1022400038F4803A09F46BC0883A09F0B9C082C00A
|
||||
:10225000803C09F4ABC0883C09F4A8C0883B09F075
|
||||
:10226000AFC08DC0809145028093BB0012C0909199
|
||||
:10227000420280914102981788F580914202E82F2E
|
||||
:10228000F0E0E95BFD4F90819093BB008F5F8093FE
|
||||
:10229000420285EC88C080933D0290C080933D024D
|
||||
:1022A00056C0809142029091BB00E82FF0E0E95BBC
|
||||
:1022B000FD4F90838F5F8093420290914202809104
|
||||
:1022C00041026DC0809142029091BB00E82FF0E086
|
||||
:1022D000E95BFD4F90838F5F8093420280914402BF
|
||||
:1022E00081116CC081E08093430284EA60C083E086
|
||||
:1022F0008093460210923E02CCCF80913E02803203
|
||||
:1023000008F050C080913E029091BB00E82FF0E0B1
|
||||
:10231000E557FD4F90838F5F80933E02BACF809147
|
||||
:102320003E02803230F4E0913E02F0E0E557FD4F8E
|
||||
:1023300010820E94B11060913E02E0918702F091FC
|
||||
:10234000880270E08BE892E0099510923E020E94AC
|
||||
:10235000BB1036C084E08093460210924002109277
|
||||
:102360003F02E0918902F0918A02099580913F0233
|
||||
:10237000811105C081E080933F0210926702809135
|
||||
:102380004002E82FF0E0E959FD4F90819093BB00A7
|
||||
:102390008F5F809340029091400280913F02981796
|
||||
:1023A00008F477CF85E88093BC000AC085EC809361
|
||||
:1023B000BC001092460204C010923D020E94B1106F
|
||||
:1023C000FF91EF91BF91AF919F918F917F916F910D
|
||||
:1023D0005F914F913F912F910F900FBE0F901F90E3
|
||||
:1023E00018958E3008F08E5087702091060140E4D9
|
||||
:1023F000249F90011124822B80937C0080917A008D
|
||||
:10240000806480937A0080917A0086FDFCCF2091D1
|
||||
:10241000780030917900932F80E0AC01422B9A0133
|
||||
:10242000C90108951F93CF93DF93182FEB0161E04B
|
||||
:102430000E949D12209711F460E004C0CF3FD105A7
|
||||
:1024400039F461E0812FDF91CF911F910C94D51267
|
||||
:10245000E12FF0E0E859FF4FE491E330B9F028F4C0
|
||||
:10246000E13051F0E230B1F50CC0E63019F1E7305F
|
||||
:1024700049F1E43079F514C084B5806884BDC7BDE6
|
||||
:102480002EC084B5806284BDC8BD29C08091800003
|
||||
:10249000806880938000D0938900C09388001FC01B
|
||||
:1024A00080918000806280938000D0938B00C093E5
|
||||
:1024B0008A0015C08091B00080688093B000C093FE
|
||||
:1024C000B3000DC08091B00080628093B000C093D3
|
||||
:1024D000B40005C0C038D1050CF0B3CFADCFDF914B
|
||||
:1024E000CF911F910895833069F028F48130A1F0D5
|
||||
:1024F000823011F514C08630B1F08730C1F08430DD
|
||||
:10250000D9F404C0809180008F7703C0809180004F
|
||||
:102510008F7D80938000089584B58F7702C084B545
|
||||
:102520008F7D84BD08958091B0008F7703C0809126
|
||||
:10253000B0008F7D8093B0000895CF93DF9390E03B
|
||||
:10254000FC01E458FF4F4491FC01E057FF4F849198
|
||||
:10255000882341F190E0880F991FFC01E854FF4F58
|
||||
:1025600025913491D90182559F4FFC018591949119
|
||||
:10257000C82FD92F9FB7F8948C91611106C0409550
|
||||
:1025800084238C938881842308C0623041F4242FF3
|
||||
:10259000209582238C938881842B888302C0842B8E
|
||||
:1025A0008C939FBFDF91CF9108950F931F93CF938B
|
||||
:1025B000DF931F92CDB7DEB7282F30E0F901E8593D
|
||||
:1025C000FF4F8491F901E458FF4F1491F901E0574E
|
||||
:1025D000FF4F04910023D1F0882321F069830E94EA
|
||||
:1025E00073126981E02FF0E0EE0FFF1FE255FF4FFD
|
||||
:1025F00085919491DC019FB7F8948C91611103C08F
|
||||
:102600001095812301C0812B8C939FBF0F90DF9188
|
||||
:10261000CF911F910F910895CF93DF93282F30E032
|
||||
:10262000F901E859FF4F8491F901E458FF4FD49123
|
||||
:10263000F901E057FF4FC491CC2389F081110E942A
|
||||
:102640007312EC2FF0E0EE0FFF1FEC55FF4F85915A
|
||||
:102650009491DC018C918D2321E030E011F420E095
|
||||
:1026600030E0C901DF91CF9108958F929F92AF9290
|
||||
:10267000BF92CF92DF92EF92FF920F931F93CF936F
|
||||
:10268000DF9390E0FC01E458FF4FD491FC01E05748
|
||||
:10269000FF4F7491611102C0C0E001C0CD2FDA017B
|
||||
:1026A000C901880F991FAA1FBB1F54E0B695A795B3
|
||||
:1026B000979587955A95D1F7672F70E0660F771F2A
|
||||
:1026C0006C557F4F812C912C5401FB010591149185
|
||||
:1026D00010C0C12CD12C7601C394C80CD91CEA1CA3
|
||||
:1026E000FB1C88169906AA06BB0609F448C04601D9
|
||||
:1026F0005701F801E081ED23EC1759F310C0C12C0C
|
||||
:10270000D12C7601C394C80CD91CEA1CFB1C88167A
|
||||
:102710009906AA06BB0699F14601570103C0FB01C1
|
||||
:1027200005911491F801E081ED23EC13E8CF8819AD
|
||||
:102730009909AA09BB0920E030E0A901FB016591D4
|
||||
:10274000749109C0281739074A075B07C1F02F5F4A
|
||||
:102750003F4F4F4F5F4FFB01E081ED23EC1791F3AB
|
||||
:10276000A5E1B0E00E94D2188B019C01005F1F4FD1
|
||||
:102770002F4F3F4F369527951795079503C000E0DB
|
||||
:1027800010E09801B801C901DF91CF911F910F911D
|
||||
:10279000FF90EF90DF90CF90BF90AF909F908F9081
|
||||
:1027A00008951F920F920FB60F9211242F933F930B
|
||||
:1027B0008F939F93AF93BF938091AB029091AC02A4
|
||||
:1027C000A091AD02B091AE023091B302232F285EEA
|
||||
:1027D0002D3720F40896A11DB11D05C0232F2556C5
|
||||
:1027E0000996A11DB11D2093B3028093AB02909373
|
||||
:1027F000AC02A093AD02B093AE028091AF02909173
|
||||
:10280000B002A091B102B091B2020196A11DB11D1A
|
||||
:102810008093AF029093B002A093B102B093B20242
|
||||
:10282000BF91AF919F918F913F912F910F900FBECC
|
||||
:102830000F901F9018950F931F938FB7F8940091E6
|
||||
:10284000AB021091AC022091AD023091AE028FBF6D
|
||||
:10285000B801C9011F910F9108950F931F939FB75E
|
||||
:10286000F8940091AF021091B0022091B102309122
|
||||
:10287000B20286B5A89B06C08F3F21F00F5F1F4FA5
|
||||
:102880002F4F3F4F9FBF322F212F102F0027080FB0
|
||||
:10289000111D211D311D45E0000F111F221F331F87
|
||||
:1028A0004A95D1F7B801C9011F910F910895CF92B0
|
||||
:1028B000DF92EF92FF92CF93DF936B017C010E9436
|
||||
:1028C0002D14EB010EC00E942D146C1B7D0B683E75
|
||||
:1028D000734038F081E0C81AD108E108F108C85106
|
||||
:1028E000DC4FC114D104E104F10469F7DF91CF9109
|
||||
:1028F000FF90EF90DF90CF900895019739F0019706
|
||||
:1029000029F0880F991F01970197F1F7089578949E
|
||||
:1029100084B5826084BD84B5816084BD85B58260E4
|
||||
:1029200085BD85B5816085BDEEE6F0E08081816082
|
||||
:102930008083E1E8F0E01082808182608083E0E8BB
|
||||
:10294000F0E0808181608083E1EBF0E08081846051
|
||||
:102950008083E0EBF0E0808181608083EAE7F0E053
|
||||
:1029600080818460808380818260808380818160B7
|
||||
:1029700080838081806880831092C1000895CF9207
|
||||
:10298000DF92EF92FF920F931F93CF93DF936C012F
|
||||
:10299000EB017A01E60EF71E00E010E00BC0699132
|
||||
:1029A000D601ED91FC910190F081E02DC6010995D1
|
||||
:1029B000080F191FCE15DF0591F7C801DF91CF91E0
|
||||
:1029C0001F910F91FF90EF90DF90CF900895DB0162
|
||||
:1029D0000D900020E9F7AD0141505109461B570BFE
|
||||
:1029E000DC01ED91FC910280F381E02D09940C94BF
|
||||
:1029F000E714DC01ED91FC910190F081E02D099448
|
||||
:102A00000F931F93CF93DF93EC016DE00E94F914B5
|
||||
:102A10008C016AE0CE010E94F9149C01200F311F45
|
||||
:102A2000C901DF91CF911F910F9108950F931F93CB
|
||||
:102A3000CF93DF93EC010E94E7148C01CE010E943A
|
||||
:102A400000159801280F391FC901DF91CF911F91FF
|
||||
:102A50000F9108950E9487140E948C07C6E0D6E16A
|
||||
:102A60000E94AC072097E1F30E940616F9CFFC0103
|
||||
:102A700084859585FC01E05CFF4F20813181FC015C
|
||||
:102A8000EE5BFF4F80819181281B390B2F73332719
|
||||
:102A9000C9010895FC0184859585FC01E05CFF4F28
|
||||
:102AA00040815181FC01EE5BFF4F20813181421753
|
||||
:102AB000530741F00190F081E02DE80FF91F2081CC
|
||||
:102AC00030E002C02FEF3FEFC9010895FC0184857B
|
||||
:102AD0009585FC01E05CFF4F40815181FC01EE5B7C
|
||||
:102AE000FF4F208131814217530781F0A081B181CE
|
||||
:102AF000A80FB91F8C91208131812F5F3F4F2F7319
|
||||
:102B0000332731832083282F30E002C02FEF3FEF9F
|
||||
:102B1000C9010895FC0186859785FC01E05CFF4FA3
|
||||
:102B2000DC01AE5BBF4F408151812D913C911197EB
|
||||
:102B300042175307C1F70895CF93DF93FC018685B1
|
||||
:102B40009785DC01A05CBF4F2D913C9111972F5FC1
|
||||
:102B50003F4F2F733327EC01CE5BDF4F4881598104
|
||||
:102B600024173507D9F30D90BC91A02DA80FB91FDC
|
||||
:102B70006C93A685B785A05CBF4F11963C932E93AE
|
||||
:102B8000A689B7892C9181E090E0058C02C0880F5E
|
||||
:102B9000991F0A94E2F7282B2C9381E090E0DF91B3
|
||||
:102BA000CF91089508951F920F920FB60F9211249E
|
||||
:102BB0002F933F934F938F939F93EF93FF93409166
|
||||
:102BC000C600809157039091580301968F739927FF
|
||||
:102BD0002091590330915A038217930759F0E091DD
|
||||
:102BE0005703F0915803E95EFC4F408390935803DC
|
||||
:102BF00080935703FF91EF919F918F914F913F9158
|
||||
:102C00002F910F900FBE0F901F90189584EB92E0BC
|
||||
:102C10000E943715892B11F00C94D21508951F923C
|
||||
:102C20000F920FB60F9211242F933F938F939F9380
|
||||
:102C3000EF93FF93209113033091140380911503B8
|
||||
:102C4000909116032817390731F48091C1008F7DC8
|
||||
:102C50008093C10014C0E0911503F0911603ED526A
|
||||
:102C6000FD4F2081809115039091160301968F737B
|
||||
:102C7000992790931603809315032093C600FF9124
|
||||
:102C8000EF919F918F913F912F910F900FBE0F90D9
|
||||
:102C90001F901895CF92DF92EF92FF92CF93DF9320
|
||||
:102CA000EC016A017B01EC89FD8981E090E00E8CEA
|
||||
:102CB00002C0880F991F0A94E2F7808360E271EAEC
|
||||
:102CC00087E090E0A70196010E94F1182150310998
|
||||
:102CD000410951095695479537952795211580E16A
|
||||
:102CE000380798F0EC89FD89108260E970ED83E087
|
||||
:102CF00090E0A70196010E94F11821503109410985
|
||||
:102D000051095695479537952795E889F989308374
|
||||
:102D1000EA89FB892083EE89FF89408181E090E088
|
||||
:102D20009C010A8C02C0220F331F0A94E2F7422B47
|
||||
:102D30004083EE89FF8940819C010B8C02C0220FE9
|
||||
:102D4000331F0A94E2F7422B4083EE89FF894081CA
|
||||
:102D50009C010C8C02C0220F331F0A94E2F7422B15
|
||||
:102D60004083EE89FF8920810D8C02C0880F991F56
|
||||
:102D70000A94E2F7809582238083DF91CF91FF90C0
|
||||
:102D8000EF90DF90CF9008951092B7021092B602A4
|
||||
:102D900088EE93E0A0E0B0E08093B8029093B9028F
|
||||
:102DA000A093BA02B093BB0284E491E09093B50281
|
||||
:102DB0008093B40287E193E09093C1028093C002B4
|
||||
:102DC00083ED92E09093C3028093C20285EC90E081
|
||||
:102DD0009093C5028093C40284EC90E09093C70264
|
||||
:102DE0008093C60280EC90E09093C9028093C80261
|
||||
:102DF00081EC90E09093CB028093CA0286EC90E045
|
||||
:102E00009093CD028093CC0284E08093CE0283E045
|
||||
:102E10008093CF0287E08093D00285E08093D10237
|
||||
:102E200081E08093D20208955058BB27AA270ED084
|
||||
:102E30001CC10DD130F012D120F031F49F3F11F4BC
|
||||
:102E40001EF402C10EF4E095E7FBF8C0E92F1ED195
|
||||
:102E500080F3BA17620773078407950718F071F4B7
|
||||
:102E60009EF536C10EF4E0950B2EBA2FA02D0B0166
|
||||
:102E7000B90190010C01CA01A0011124FF27591BBF
|
||||
:102E800099F0593F50F4503E68F11A16F040A22FC5
|
||||
:102E9000232F342F4427585FF3CF46953795279536
|
||||
:102EA000A795F0405395C9F77EF41F16BA0B620B35
|
||||
:102EB000730B840BBAF09150A1F0FF0FBB1F661F7C
|
||||
:102EC000771F881FC2F70EC0BA0F621F731F841FBF
|
||||
:102ED00048F4879577956795B795F7959E3F08F0E5
|
||||
:102EE000B3CF9395880F08F09927EE0F97958795A4
|
||||
:102EF00008950CD0BAC0B2D040F0A9D030F021F47F
|
||||
:102F00005F3F19F09BC05111E4C09EC0BFD098F341
|
||||
:102F10009923C9F35523B1F3951B550BBB27AA275A
|
||||
:102F200062177307840738F09F5F5F4F220F331FCC
|
||||
:102F3000441FAA1FA9F333D00E2E3AF0E0E830D098
|
||||
:102F400091505040E695001CCAF729D0FE2F27D09B
|
||||
:102F5000660F771F881FBB1F261737074807AB0769
|
||||
:102F6000B0E809F0BB0B802DBF01FF2793585F4FDE
|
||||
:102F70002AF09E3F510568F061C0ABC05F3FECF3A3
|
||||
:102F8000983EDCF3869577956795B795F7959F5FA3
|
||||
:102F9000C9F7880F911D9695879597F90895E1E0F7
|
||||
:102FA000660F771F881FBB1F621773078407BA0756
|
||||
:102FB00020F0621B730B840BBA0BEE1F88F7E095B1
|
||||
:102FC0000895E89409C097FB3EF49095809570951C
|
||||
:102FD00061957F4F8F4F9F4F9923A9F0F92F96E965
|
||||
:102FE000BB279395F695879577956795B795F111DA
|
||||
:102FF000F8CFFAF4BB0F11F460FF1BC06F5F7F4F77
|
||||
:103000008F4F9F4F16C0882311F096E911C0772388
|
||||
:1030100021F09EE8872F762F05C0662371F096E891
|
||||
:10302000862F70E060E02AF09A95660F771F881F60
|
||||
:10303000DAF7880F9695879597F9089597F99F671E
|
||||
:1030400080E870E060E008959FEF80EC0895002430
|
||||
:103050000A941616170618060906089500240A94FD
|
||||
:1030600012161306140605060895092E0394000C83
|
||||
:1030700011F4882352F0BB0F40F4BF2B11F460FF12
|
||||
:1030800004C06F5F7F4F8F4F9F4F089557FD90583B
|
||||
:10309000440F551F59F05F3F71F04795880F97FB1C
|
||||
:1030A000991F61F09F3F79F08795089512161306D6
|
||||
:1030B0001406551FF2CF4695F1DF08C01616170605
|
||||
:1030C0001806991FF1CF869571056105089408953A
|
||||
:1030D000E894BB2766277727CB0197F908950BD093
|
||||
:1030E000C4CFB5DF28F0BADF18F0952309F0A6CFDA
|
||||
:1030F000ABCF1124EECFCADFA0F3959FD1F3950F8C
|
||||
:1031000050E0551F629FF001729FBB27F00DB11D6B
|
||||
:10311000639FAA27F00DB11DAA1F649F6627B00DFB
|
||||
:10312000A11D661F829F2227B00DA11D621F739FE4
|
||||
:10313000B00DA11D621F839FA00D611D221F749FF2
|
||||
:103140003327A00D611D231F849F600D211D822F39
|
||||
:10315000762F6A2F11249F5750408AF0E1F0882380
|
||||
:103160004AF0EE0FFF1FBB1F661F771F881F91508D
|
||||
:103170005040A9F79E3F510570F060CFAACF5F3F46
|
||||
:10318000ECF3983EDCF3869577956795B795F795C0
|
||||
:10319000E7959F5FC1F7FE2B880F911D9695879548
|
||||
:1031A00097F908950E942F19A59F900DB49F900D37
|
||||
:1031B000A49F800D911D1124089597FB072E16F4EE
|
||||
:1031C000009407D077FD09D00E943B1907FC05D079
|
||||
:1031D0003EF4909581959F4F0895709561957F4F2E
|
||||
:1031E0000895A1E21A2EAA1BBB1BFD010DC0AA1F48
|
||||
:1031F000BB1FEE1FFF1FA217B307E407F50720F060
|
||||
:10320000A21BB30BE40BF50B661F771F881F991FDA
|
||||
:103210001A9469F760957095809590959B01AC0123
|
||||
:10322000BD01CF010895052E97FB16F4009407D039
|
||||
:1032300057FD0DD00E94F11807FC09D07EF490953F
|
||||
:103240008095709561957F4F8F4F9F4F0895509552
|
||||
:103250004095309521953F4F4F4F5F4F0895A29F66
|
||||
:10326000B001B39FC001A39F01D0B29F700D811D1B
|
||||
:103270001124911D0895AA1BBB1B51E107C0AA1F71
|
||||
:10328000BB1FA617B70710F0A61BB70B881F991F07
|
||||
:103290005A95A9F780959095BC01CD010895EE0F40
|
||||
:1032A000FF1F0590F491E02D09940F931F93CF9386
|
||||
:1032B000DF93689F8001699F100D789F100D112486
|
||||
:1032C000C8010E947319C82FD92F209731F0A80187
|
||||
:1032D00060E070E08C2F0E94AA1ACE01DF91CF919E
|
||||
:1032E0001F910F9108950F931F93CF93DF93823017
|
||||
:1032F000910510F482E090E0E0915D03F0915E03AF
|
||||
:1033000020E030E0C0E0D0E023C040815181481788
|
||||
:103310005907A8F04817590761F4828193812097D3
|
||||
:1033200019F09B838A832EC090935E0380935D0384
|
||||
:1033300029C02115310529F04217530710F0A901C2
|
||||
:1033400002C0BE01DF0102811381EF019A01F80181
|
||||
:103350003097D9F62115310509F1281B390B243096
|
||||
:10336000310590F412968D919C911397611571051A
|
||||
:1033700021F0FB019383828304C090935E038093CA
|
||||
:103380005D03FD01329644C0FD01E20FF31F8193FE
|
||||
:103390009193225031092D933C933AC020915B03C5
|
||||
:1033A00030915C03232B41F4209102013091030101
|
||||
:1033B00030935C0320935B03209100013091010165
|
||||
:1033C0002115310541F42DB73EB7409104015091CC
|
||||
:1033D0000501241B350BE0915B03F0915C03E217C0
|
||||
:1033E000F307A0F42E1B3F0B2817390778F0AC0128
|
||||
:1033F0004E5F5F4F2417350748F04E0F5F1F509305
|
||||
:103400005C0340935B038193919302C0E0E0F0E0A2
|
||||
:10341000CF01DF91CF911F910F910895EF92FF920D
|
||||
:103420000F931F93CF93DF93009709F48EC0DC01B5
|
||||
:10343000129713961C921E921297E0905D03F090E3
|
||||
:103440005E03E114F10489F42D913C911197280F4A
|
||||
:10345000391F80915B0390915C038217930789F574
|
||||
:10346000B0935C03A0935B0370C0E70120E030E001
|
||||
:1034700001C0EA01CA17DB0738F44A815B819E016B
|
||||
:1034800041155105B1F722C0AC0142505109FA0172
|
||||
:10349000D383C28300811181BC01600F711F6C173F
|
||||
:1034A0007D0761F468817981600F711F6E5F7F4FC6
|
||||
:1034B000718360836A817B81738362832115310507
|
||||
:1034C00029F4B0935E03A0935D033FC0F901B38379
|
||||
:1034D000A283E90149915991C40FD51FAC17BD07CB
|
||||
:1034E00071F4DC019E918E91840F951F0296918359
|
||||
:1034F000808312968D919C91139793838283A0E091
|
||||
:10350000B0E002C0D7017C01F7018281938100976E
|
||||
:10351000C9F7C701029620813181820F931F209144
|
||||
:103520005B0330915C032817390779F4109729F46D
|
||||
:1035300010925E0310925D0304C013961C921E92BB
|
||||
:103540001297F0925C03E0925B03CDB7DEB7E6E042
|
||||
:103550000C94BD1ADC0101C06D9341505040E0F75E
|
||||
:1035600008952A88398848885F846E847D848C8495
|
||||
:103570009B84AA84B984C884DF80EE80FD800C819E
|
||||
:103580001B81AA81B981CE0FD11D0FB6F894DEBF81
|
||||
:0C3590000FBECDBFED010895F894FFCFF1
|
||||
:10359C0000005F0320000101000A006400E8033F03
|
||||
:1035AC00065B4F666D7D077F6F777C395E79715254
|
||||
:1035BC00656164206661696C005265616479210003
|
||||
:1035CC0000000000350F070FAA0EB30EC70ED70E62
|
||||
:1035DC00000000009C15BF14371566154A158A1596
|
||||
:00000001FF
|
||||
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr4.cpp.hex
Normal file
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr4.cpp.hex
Normal file
|
|
@ -0,0 +1,864 @@
|
|||
:100000000C9463000C948B000C948B000C948B006C
|
||||
:100010000C948B000C948B000C948B000C948B0034
|
||||
:100020000C948B000C948B000C948B000C948B0024
|
||||
:100030000C948B000C948B000C948B000C948B0014
|
||||
:100040000C94D1130C948B000C94D3150C940F16B4
|
||||
:100050000C948B000C948B000C948B000C948B00F4
|
||||
:100060000C94C1100C948B000000000700020100EA
|
||||
:100070000003040600000000000000000102040864
|
||||
:100080001020408001020408102001020408102002
|
||||
:10009000040404040404040402020202020203032E
|
||||
:1000A00003030303000000002300260029000000D2
|
||||
:1000B0000000250028002B0000000000240027007D
|
||||
:1000C0002A00D00FC41611241FBECFEFD8E0DEBF28
|
||||
:1000D000CDBF11E0A0E0B1E0ECE9F5E302C005908E
|
||||
:1000E0000D92A035B107D9F713E0A0E5B1E001C04A
|
||||
:1000F0001D92AF35B107E1F710E0C6ECD0E004C0C7
|
||||
:100100002297FE010E945119C23CD107C9F70E94F3
|
||||
:100110002A150C94CC1A0C940000CF93DF93EC01B9
|
||||
:1001200060E088810E94D51284E190E00E947D14F5
|
||||
:1001300061E088810E94D51284E190E0DF91CF9147
|
||||
:100140000C947D140F931F93CF93DF93EC01062F34
|
||||
:1001500018E007FF02C061E001C060E089810E94F1
|
||||
:10016000D512CE010E948D00000F115091F7DF9142
|
||||
:10017000CF911F910F910895EF92FF921F93CF930C
|
||||
:10018000DF9300D0CDB7DEB77C01162F27FF02C06A
|
||||
:1001900060EC01C060EE26FF606147FF686046FFCB
|
||||
:1001A000646017FF626016FF6160C70129834A839C
|
||||
:1001B0000E94A2002981622FC7010E94A2004A81E9
|
||||
:1001C000642FC7010E94A200612FC7010F900F90FA
|
||||
:1001D000DF91CF911F91FF90EF900C94A2007F923E
|
||||
:1001E0008F929F92AF92BF92CF92DF92EF92FF9247
|
||||
:1001F0000F931F93CF93DF93EC01162F942E822E33
|
||||
:1002000060E00E94A20060E0CE010E94A20060E0D7
|
||||
:10021000CE010E94A20060E0CE010E94A20083E015
|
||||
:10022000189F7001112467018FEFC81AD80A57016F
|
||||
:1002300082E0A80EB11C712C1FC071120FC0EB819F
|
||||
:10024000FC81EE0DFF1D9082EB81FC81EC0DFD1D0C
|
||||
:100250008082EB81FC81EA0DFB1D0083EB81FC8138
|
||||
:1002600083E0789EE00DF11D11242281418160819F
|
||||
:10027000CE010E94BC0073948A817816F0F260E08F
|
||||
:10028000CE010E94A20060E0CE010E94A20060E0C8
|
||||
:10029000CE010E94A20060E0CE01DF91CF911F91BC
|
||||
:1002A0000F91FF90EF90DF90CF90BF90AF909F9015
|
||||
:1002B0008F907F900C94A2000F931F93CF93DF93A6
|
||||
:1002C000EC01862F688349832A8361E00E949D1296
|
||||
:1002D00061E089810E949D128A8161E070E023E0E3
|
||||
:1002E000829FC00111240E9455198B839C8310E0CA
|
||||
:1002F00008C000E020E040E0612FCE010E94EF0046
|
||||
:100300001F5F8A811817A8F3DF91CF911F910F917A
|
||||
:100310000895FC018281089587EE91E00C94750F99
|
||||
:10032000CF93DF93EC0168E670E087EE91E00E94E6
|
||||
:10033000AE0F60E087EE91E00E94350F87EE91E00E
|
||||
:100340000E94C30F47E050E068E670E087EE91E05E
|
||||
:100350000E94A10F87EE91E00E94B30E382F3695D0
|
||||
:10036000369536953E70232F220F220F230F8F7064
|
||||
:100370009927280F288387EE91E00E94B30E282F3B
|
||||
:1003800022952F708F7099273AE0239F800D1124BA
|
||||
:10039000898387EE91E00E94B30E382F369536950B
|
||||
:1003A00036953670232F220F220F230F8F70992737
|
||||
:1003B000280F2A8387EE91E00E94B30E282F229502
|
||||
:1003C0002F708F7099273AE0239F800D11248B8323
|
||||
:1003D00087EE91E00E94B30E282F22952F708F7028
|
||||
:1003E00099273AE0239F800D11248C8387EE91E0BA
|
||||
:1003F0000E94B30E282F22952F708F7099273AE014
|
||||
:10040000239F800D11248D8387EE91E00E94B30E0F
|
||||
:10041000282F22952F708F7099273AE0239F800D07
|
||||
:1004200011248E831F82DF91CF910895CF93DF93A4
|
||||
:10043000EC01862F688319824A831B822C831E82DB
|
||||
:100440001D8261E00E949D1261E08A81DF91CF915F
|
||||
:100450000C949D121F93CF93DF93EC0160E08A818F
|
||||
:100460000E94D5128AE090E00E947D1414E061E0C1
|
||||
:100470008A810E94D51260E08A810E94D5121150B3
|
||||
:10048000B1F7DF91CF911F910895FF920F931F93C2
|
||||
:10049000CF93DF93EC018B0190E1F92E612F661F62
|
||||
:1004A0006627661F8A810E94D51288810E940C13DC
|
||||
:1004B00061E0892B09F060E088810E94D512000F6D
|
||||
:1004C000111FFA9459F7DF91CF911F910F91FF906F
|
||||
:1004D0000895EF92FF920F931F93CF93DF93EC0158
|
||||
:1004E0007B01CB0193709E838D8360E070E0CE0131
|
||||
:1004F0000E94450200E010E08C81882351F0C70182
|
||||
:10050000002E02C0880F991F0A94E2F791FF0DC0D8
|
||||
:1005100009C0C701002E02C0969587950A94E2F79C
|
||||
:1005200080FF03C06FEF70E002C060E070E0CE01BA
|
||||
:100530000E9445020F5F1F4F0A301105E9F660E087
|
||||
:1005400070E0CE010E94450260E070E0CE010E94A2
|
||||
:100550004502CE01DF91CF911F910F91FF90EF9057
|
||||
:100560000C942A02662321F06B3018F06AE001C077
|
||||
:1005700061E0262F215061E070E002C0660F771F16
|
||||
:100580002A95E2F7FC01258136816227732776835D
|
||||
:1005900065830C946902662321F06B3018F06AE0E1
|
||||
:1005A00001C061E0562F5150FC012581368161E088
|
||||
:1005B00070E002C0660F771F5A95E2F7442319F0E6
|
||||
:1005C000622B732B04C06095709562237323FC012A
|
||||
:1005D000768365830C9469026B3008F06AE02FEF34
|
||||
:1005E0003FEF02C0220F331F6A95E2F72095309546
|
||||
:1005F000FC0136832583B9010C946902FC016483F4
|
||||
:10060000658176810C946902FC018581968108954B
|
||||
:10061000FC0181E020813181232B09F480E00895E1
|
||||
:10062000CF93DF93EC01862F6883498360E00E94BB
|
||||
:100630009D1260E089810E949D1260E088810E9485
|
||||
:10064000D51260E08981DF91CF910C94D51268308A
|
||||
:1006500010F4685F01C06FE0FC016283089561E0FF
|
||||
:10066000FC0181810E949D1282E390E00C947D1434
|
||||
:10067000CF93DF93EC0161E089810E949D1282E3B8
|
||||
:1006800090E00E947D1460E088810E949D1282E3C8
|
||||
:1006900090E00E947D1460E089810E949D1282E3B7
|
||||
:1006A00090E0DF91CF910C947D140F931F93CF9323
|
||||
:1006B000DF93EC01062F18E061E088810E949D1213
|
||||
:1006C00082E390E00E947D1400FF02C060E001C060
|
||||
:1006D00061E089810E949D1282E390E00E947D1476
|
||||
:1006E00060E088810E949D1282E390E00E947D1468
|
||||
:1006F0000695115009F761E088810E949D1260E023
|
||||
:1007000089810E949D1282E390E00E947D1460E046
|
||||
:1007100088810E949D1282E390E00E947D1489816D
|
||||
:100720000E940C13182F811104C061E089810E947E
|
||||
:100730009D1282E390E00E947D1461E088810E9416
|
||||
:100740009D1282E390E00E947D1481E0111101C0AE
|
||||
:1007500080E0DF91CF911F910F910895CF92DF92AA
|
||||
:10076000EF92FF920F931F93CF93DF9300D0CDB7FB
|
||||
:10077000DEB76C01F62EE42E29837A830E942F03C4
|
||||
:1007800060E4C6010E945503C6010E943803C601F9
|
||||
:100790000E942F032981622F63706054C6010E945A
|
||||
:1007A00055030F2D7A81172F06C0F80161918F0133
|
||||
:1007B000C6010E945503802F8F198E15B0F3C60114
|
||||
:1007C0000E943803C6010E942F03F601628160581F
|
||||
:1007D000C6010E945503C6010F900F90DF91CF9183
|
||||
:1007E0001F910F91FF90EF90DF90CF900C94380302
|
||||
:1007F0004F925F926F927F928F929F92AF92BF9231
|
||||
:10080000CF92DF92EF920F931F93CF93DF9300D09D
|
||||
:1008100000D0CDB7DEB73C016B01322F202F8FE027
|
||||
:10082000A82E81E0B82E88248394912C8C0E9D1ED6
|
||||
:10083000F40101E01FE3D5015E904E905D01C60119
|
||||
:10084000B2010E94DD186115710561F4411106C005
|
||||
:10085000002321F08E2F8819833011F4108313C0E8
|
||||
:10086000108211C0DB01AF70BB27A15FBE4F8C911E
|
||||
:100870008083649DC001659D900D749D900D112431
|
||||
:10088000C81AD90A00E0EE2039F08E2F881981307D
|
||||
:1008900019F48081806880833196B7E0AB16B1E0AF
|
||||
:1008A000BB0649F684E090E0831B9109BE016F5FAF
|
||||
:1008B0007F4F680F791F432FC3010E94AE030F9033
|
||||
:1008C0000F900F900F90DF91CF911F910F91EF90AC
|
||||
:1008D000DF90CF90BF90AF909F908F907F906F9060
|
||||
:1008E0005F904F9008956F70E62FF0E0E15FFE4F4C
|
||||
:1008F00080810895FC0181E09081911101C080E028
|
||||
:1009000008951F93CF93DF931F92CDB7DEB7162FB5
|
||||
:1009100087EE91E049830E94750F6CE470E087EEEA
|
||||
:1009200091E00E94AE0F612F87EE91E00E94350F9B
|
||||
:100930004981642F87EE91E00E94350F87EE91E0A8
|
||||
:100940000F90DF91CF911F910C94C30F462F67E05A
|
||||
:100950000C948104462F68E00C948104CF93DF93BC
|
||||
:10096000EC0160E00E94A60460E0CE010E94AA04AF
|
||||
:1009700061E0CE01DF91CF910C94A6044F925F927B
|
||||
:100980006F927F928F929F92AF92BF92CF92DF929F
|
||||
:10099000EF92FF920F931F93CF93DF9300D01F929C
|
||||
:1009A000CDB7DEB75B016A01790180E48B838A836E
|
||||
:1009B00089830E941B142B013C010DC00E941B1453
|
||||
:1009C0006419750986099709653F7140810591058C
|
||||
:1009D00014F080E06EC087EE91E00E94AA0E181617
|
||||
:1009E000190664F387EE91E00E94B30E43E050E0F5
|
||||
:1009F0006CE470E087EE91E00E94A10F0E941B144E
|
||||
:100A00002B013C018E010F5F1F4F48012DC0C80113
|
||||
:100A1000881999090397D4F40E941B142B013C01F7
|
||||
:100A200011C087EE91E00E94B30EF80180830E940E
|
||||
:100A30001B146419750986099709633371058105CB
|
||||
:100A400091053CF6F8018081803458F70E941B1410
|
||||
:100A50000F5F1F4F6419750986099709653F71403B
|
||||
:100A6000810591050CF0B5CF87EE91E00E94AA0EAA
|
||||
:100A7000892B69F69981892F880F880F95FD8D5FE5
|
||||
:100A800085958595F50180839A81892F880F880F38
|
||||
:100A900095FD8D5F85958595F60180839B81892FD6
|
||||
:100AA000880F880F95FD8D5F85958595F70180836B
|
||||
:100AB00081E00F900F900F90DF91CF911F910F91D8
|
||||
:100AC000FF90EF90DF90CF90BF90AF909F908F906E
|
||||
:100AD0007F906F905F904F900895CF93DF93EC01DC
|
||||
:100AE000862F6E834F83288791E09D8760E00E9468
|
||||
:100AF0009D1261E08E810E94D51219861A861B868E
|
||||
:100B00001C86DF91CF910895DF92EF92FF920F93B1
|
||||
:100B10001F93CF93DF93EC0161E08E810E94D51289
|
||||
:100B20006AEF70E080E090E00E9457140E941B146E
|
||||
:100B300009851A852B853C85601771078207930705
|
||||
:100B400020F419861A861B861C862D85211111C05A
|
||||
:100B500009851A852B853C85DC01CB01801B910B17
|
||||
:100B6000A20BB30B803D9740A105B10510F481E0C5
|
||||
:100B700073C01D860E941B1469877A878B879C87A8
|
||||
:100B80001C821B821A821982188261E08E810E9467
|
||||
:100B90009D1260E08E810E94D51264E170E080E0D9
|
||||
:100BA00090E00E945714F89461E08E810E94D51263
|
||||
:100BB00088E290E00E947D1460E08E810E949D1288
|
||||
:100BC000F12CD12C81E009C0E39481E090E00E94F7
|
||||
:100BD0007D148FEFE81204C009C0E12C082F10E04B
|
||||
:100BE0008E810E940C138017910771F38E810E94F1
|
||||
:100BF0000C139FEFE916C9F023E02F1590F4F0FCD9
|
||||
:100C000010C09D2D969596959695FE01E90FF11DC4
|
||||
:100C10009081990F908328852E1510F49160908310
|
||||
:100C2000D394F39495E5F912D8CF789427E22D1553
|
||||
:100C300090F42C8130E04881898190E0840F911DEF
|
||||
:100C40004A81840F911D4B81840F911D992728178C
|
||||
:100C5000390709F48CCF80E0DF91CF911F910F917C
|
||||
:100C6000FF90EF90DF900895EF92FF920F931F9304
|
||||
:100C7000CF93DF93EC010E948405882391F18F814B
|
||||
:100C80008B3029F070F18551823058F507C06881AA
|
||||
:100C900070E080E090E00E94E1172DC0688170E074
|
||||
:100CA00080E090E00E94E11720E030E040E853E46B
|
||||
:100CB0000E946F187B018C01698170E080E090E0F8
|
||||
:100CC0000E94E3179B01AC016E2D7F2D802F912F89
|
||||
:100CD0000E94151720E030E040E251E40E947917AD
|
||||
:100CE0000AC06FE171E084EB92E00E94F71460E0CB
|
||||
:100CF00070E080EC9FE7DF91CF911F910F91FF9003
|
||||
:100D0000EF900895CF92DF92EF92FF920F931F938F
|
||||
:100D1000CF93DF938C01C62F0E948405882309F4AA
|
||||
:100D200077C0F80187818B3039F008F471C08551A4
|
||||
:100D3000823008F06DC01DC0F801628170E080E073
|
||||
:100D400090E00E94E117B62FA72FF82FE92F462F2A
|
||||
:100D5000572F682F792FCB01BA01CC2309F462C039
|
||||
:100D600020E030E040E151E46B2F7A2F8F2F9E2F4F
|
||||
:100D700037C0F801D2816D2F6F7770E080E090E08E
|
||||
:100D80000E94E31720E030E040E853E40E946F182F
|
||||
:100D90006B017C01F801638170E080E090E00E94CB
|
||||
:100DA000E3179B01AC016C2D7D2D8E2D9F2D0E9494
|
||||
:100DB000151720E030E040E251E40E947917472FF8
|
||||
:100DC000382F292F862F942FA32FB22FBC01CD01AE
|
||||
:100DD000D7FD9058CC2331F120E030E040E151E4E0
|
||||
:100DE0000E946F1820E030E040EA50E40E9479173A
|
||||
:100DF00020E030E040E052E40E941517472F382FE2
|
||||
:100E0000292F862F942FA32FB22FBC01CD010AC00A
|
||||
:100E10006FE171E084EB92E00E94F71460E070E013
|
||||
:100E200080EC9FE7DF91CF911F910F91FF90EF90A2
|
||||
:100E3000DF90CF900895CF93DF9322C087EE91E0AB
|
||||
:100E40000E94AA0E049741F4109269011092680161
|
||||
:100E500010926B0110926A01C0916A01D0916B01EE
|
||||
:100E600087EE91E00E94B30EFE01EE0FFF1FE459E2
|
||||
:100E7000FE4F918380832196D0936B01C0936A01CA
|
||||
:100E800087EE91E00E94AA0E892BC1F6DF91CF91E7
|
||||
:100E9000089580916C0190916D01019731F46091FA
|
||||
:100EA000670187EE91E00E94350F80916C0190916F
|
||||
:100EB0006D018330910529F08730910511F0C897B5
|
||||
:100EC00041F443E050E06EE571E087EE91E00E946E
|
||||
:100ED000070F80916C0190916D018830910511F0A0
|
||||
:100EE000449741F444E050E06EE571E087EE91E014
|
||||
:100EF0000E94070F80916C0190916D018E319105D8
|
||||
:100F000011F0889741F449E050E06EE571E087EE1A
|
||||
:100F100091E00C94070F089540E855E260E070E01E
|
||||
:100F200084EB92E00E944A1664E070E087EE91E064
|
||||
:100F30000E94920F6BE177E087EE91E00E94C60F6E
|
||||
:100F400069E477E087EE91E00E94CB0F69E271E0FF
|
||||
:100F500084EB92E00C941615AF92BF92CF92DF9281
|
||||
:100F6000EF92FF920F931F93CF93DF93CDB7DEB72E
|
||||
:100F70002C970FB6F894DEBF0FBECDBF80916A01EB
|
||||
:100F800090916B01049709F0D4C68091680190910B
|
||||
:100F90006901892B09F0CDC681E090E09093690149
|
||||
:100FA0008093680180916C0190916D01019731F4FB
|
||||
:100FB00080916E010E940C138093670180916C01F7
|
||||
:100FC00090916D01029731F46091700180916E01F2
|
||||
:100FD0000E94D51280916C0190916D010397A9F444
|
||||
:100FE00080916E010E94F11190935D0180935C01EC
|
||||
:100FF0009C0197FF02C021503F4F30935F0160E09A
|
||||
:1010000071E00E94DD188093600180916C019091E5
|
||||
:101010006D01049741F460917001709171018091AC
|
||||
:101020006E010E94121280916C0190916D010597E2
|
||||
:1010300031F46091700180916E010E949D12809147
|
||||
:101040006C0190916D01079709F042C080916E018B
|
||||
:1010500090916F01809352019093530161E00E943F
|
||||
:101060009D1260E0809152010E94D51282E090E0D2
|
||||
:101070000E947D1461E0809152010E94D51285E0AA
|
||||
:1010800090E00E947D1460E0809152010E94D51290
|
||||
:1010900060E0809152010E949D1220E432E44FE012
|
||||
:1010A00050E061E0809152010E9435132AE330E064
|
||||
:1010B00040E050E00E941319CA01B90120E031E07C
|
||||
:1010C00040E050E00E94131920935F01609360019B
|
||||
:1010D00080916C0190916D018830910539F481E027
|
||||
:1010E00080935F0182E08093600121C0449709F5FD
|
||||
:1010F00080915B01811107C086EE91E00E94AE04F1
|
||||
:1011000081E080935B0129E531E048E551E067E546
|
||||
:1011100071E086EE91E00E94BE04809157018093B9
|
||||
:101120005F01809158018093600180915901809303
|
||||
:10113000610180916C0190916D014E9769F58091EC
|
||||
:101140005A01811107C08EED91E00E948C0181E06F
|
||||
:1011500080935A018EED91E00E9490018091E00110
|
||||
:1011600080935F018091DF01809360018091DE01B7
|
||||
:10117000809361018091E301809362018091E2019B
|
||||
:10118000809363019091E4019093640180936501E1
|
||||
:101190008091E1018093660180916C0190916D01D5
|
||||
:1011A000889709F059C08091700190917101009762
|
||||
:1011B00019F426E04BE005C08130910549F426E0A2
|
||||
:1011C00046E160916E0180ED91E00E946D0508C0DE
|
||||
:1011D0008230910519F426E045E1F3CF0397D9F366
|
||||
:1011E00060E080ED91E00E94820669877A878B87B4
|
||||
:1011F0009C8780ED91E00E9434066D837E838F830F
|
||||
:1012000098871092510110925001FE01399680E0AA
|
||||
:1012100090E001962191DC01A25ABE4F2C938430BC
|
||||
:101220009105BCF384E090E09093510180935001CC
|
||||
:101230000196DC01A25ABE4FE5E0F0E0EC0FFD1F85
|
||||
:10124000E80FF91F359720812C938830910584F39E
|
||||
:10125000909351018093500180916C0190916D01A8
|
||||
:10126000C297D9F480916E0190916F01482F21E0CF
|
||||
:101270006091700170917101672B09F420E0642F77
|
||||
:101280006F5FFC01329737E03E9FC0013F9F900D9A
|
||||
:1012900011248A559E4F0E94160280916C019091F4
|
||||
:1012A0006D01C39791F420916E0130916F0122502E
|
||||
:1012B000310947E0429FC001439F900D11248A5598
|
||||
:1012C0009E4F0E94080381116AC380916C01909126
|
||||
:1012D0006D01C49791F420916E0130916F012250FD
|
||||
:1012E000310917E0129FC001139F900D11248A55F8
|
||||
:1012F0009E4F0E94080381116BC380916C019091F5
|
||||
:101300006D01C59791F420916E0130916F012250CB
|
||||
:10131000310947E0429FC001439F900D11248A5537
|
||||
:101320009E4F0E940803811165C380916C019091CA
|
||||
:101330006D01C69791F420916E0130916F0122509A
|
||||
:10134000310917E0129FC001139F900D11248A5597
|
||||
:101350009E4F0E940803811168C380916C01909197
|
||||
:101360006D01C79791F420916E0130916F01225069
|
||||
:10137000310917E0129FC001139F900D11248A5567
|
||||
:101380009E4F0E940803811162C380916C0190916D
|
||||
:101390006D01C89791F420916E0130916F01225038
|
||||
:1013A000310917E0129FC001139F900D11248A5537
|
||||
:1013B0009E4F0E940803811163C380916C0190913C
|
||||
:1013C0006D018634910591F460916E0170916F0109
|
||||
:1013D000462F4F5F9B0122503109C901880F991F89
|
||||
:1013E000820F931F8C569E4F0E94100380916C01B8
|
||||
:1013F00090916D018734910589F420916E013091AF
|
||||
:101400006F0122503109C901880F991F820F931F64
|
||||
:101410008C569E4F0E947A04811146C380916C01C4
|
||||
:1014200090916D018834910589F420916E0130917D
|
||||
:101430006F0122503109C901880F991F820F931F34
|
||||
:101440008C569E4F0E947A04811140C380916C019A
|
||||
:1014500090916D018934910589F420916E0130914C
|
||||
:101460006F0122503109C901880F991F820F931F04
|
||||
:101470008C569E4F0E947A04811145C380916C0165
|
||||
:1014800090916D018A34910589F420916E0130911B
|
||||
:101490006F0122503109C901880F991F820F931FD4
|
||||
:1014A0008C569E4F0E947A0481114AC380916C0130
|
||||
:1014B00090916D018B34910589F420916E013091EA
|
||||
:1014C0006F0122503109C901880F991F820F931FA4
|
||||
:1014D0008C569E4F0E947A0481115AC380916C01F0
|
||||
:1014E00090916D018C34910589F420916E013091B9
|
||||
:1014F0006F0122503109C901880F991F820F931F74
|
||||
:101500008C569E4F0E947A0481115BC380916C01BE
|
||||
:1015100090916D018D349105A9F520916E01309166
|
||||
:101520006F0122503109C901880F991F820F931F43
|
||||
:101530008C569E4F0E947A048111BBC323C0812F19
|
||||
:101540000E94F111BC0120916E0130916F01225077
|
||||
:101550003109C901880F991F820F931FE12C00E008
|
||||
:1015600024E040E08C569E4F0E94F8036AEF70E042
|
||||
:1015700080E090E00E9457142FEFC21AD20ACA14DA
|
||||
:10158000DB04ECF280916C0190916D018E34910539
|
||||
:1015900089F420916E0130916F0122503109C90107
|
||||
:1015A000880F991F820F931F8C569E4F0E947A04BA
|
||||
:1015B00081118CC380916C0190916D018F349105E4
|
||||
:1015C00089F420916E0130916F0122503109C901D7
|
||||
:1015D000880F991F820F931F8C569E4F0E947A048A
|
||||
:1015E00081118EC380916C0190916D018A359105B6
|
||||
:1015F00069F480916E018093540180917001809311
|
||||
:101600005501809172018093560118C08B35910568
|
||||
:10161000A9F460916E0170916F01462F4F5F9B019D
|
||||
:101620002250310955E0529FC001539F900D112463
|
||||
:10163000209170018A589E4F0E945C0180916C013C
|
||||
:1016400090916D018C35910549F080916C019091DC
|
||||
:101650006D018D35910509F0BDC048C060916E01E6
|
||||
:1016600070916F01462F4F5F9B012250310955E069
|
||||
:10167000529FC001539F900D1124209170018A58F0
|
||||
:101680009E4F0E945C01009172011091730102FB58
|
||||
:10169000DD24D0F8D19401FBCC24C0F8C1940170B2
|
||||
:1016A0001127102F1195E12CF12CA5E0BA2E16C0B0
|
||||
:1016B00060916E0170916F0162507109B69EC00118
|
||||
:1016C000B79E900D1124012F2C2D4D2D6E2D8A5873
|
||||
:1016D0009E4F0E94EF003FEFE31AF30A80917001E2
|
||||
:1016E00090917101E816F9061CF3AFCF20917001BB
|
||||
:1016F0003091710180916E0190916F01232BB1F4B3
|
||||
:101700009C012250310945E0429FC001439F900D4A
|
||||
:10171000112400915601209155014091540160918E
|
||||
:1017200072018A589E4F0E94EF0054C09C012250C3
|
||||
:10173000310945E0429FC001439F900D11248A5812
|
||||
:101740009E4F0E948901E12CF12CC82ED12C15E06E
|
||||
:101750003DC020917001309171012130310541F47B
|
||||
:101760008091720190917301E816F906B1F42BC0D3
|
||||
:101770002230310541F480917201909173018E15F0
|
||||
:101780009F055CF420C023303105E9F4809172019B
|
||||
:1017900090917301E816F906B4F020916E01309132
|
||||
:1017A0006F0122503109129FC001139F900D112427
|
||||
:1017B0000091560120915501409154016E2D8A5897
|
||||
:1017C0009E4F0E94EF008FEFE81AF80AEC14FD0418
|
||||
:1017D0000CF4BFCF80916C0190916D018E35910515
|
||||
:1017E00049F080916C0190916D018F35910509F060
|
||||
:1017F000A0C252C08091720190917301181619060F
|
||||
:1018000034F081E090E09093730180937201209115
|
||||
:101810006E0130916F012250310945E0429FC001B5
|
||||
:10182000439F900D11248A589E4F0E948901E09099
|
||||
:101830007001F0907101C82ED12C15E029C0809163
|
||||
:101840007001909171019701281B390BC9016091BA
|
||||
:101850007201709173010E94DD18892BB1F42091FF
|
||||
:101860006E0130916F0122503109129FC001139F08
|
||||
:10187000900D112400915601209155014091540181
|
||||
:101880006E2D8A589E4F0E94EF003FEFE31AF30A35
|
||||
:10189000EC14FD04A4F2A5CF20916E0130916F01EC
|
||||
:1018A0002250310945E0429FC001439F900D112411
|
||||
:1018B0008A589E4F0E9489012091720130917301D4
|
||||
:1018C000232B59F133C080917001909171012091C7
|
||||
:1018D0006E0130916F0122503109E816F90664F467
|
||||
:1018E000129FC001139F900D112400915601209169
|
||||
:1018F00055014091540108C0129FC001139F900DE3
|
||||
:10190000112400E020E040E06E2D8A589E4F0E9496
|
||||
:10191000EF008FEFE81AF80A05C0E12CF12CC82E71
|
||||
:10192000D12C15E0EC14FD0474F203C2C82ED12CA6
|
||||
:10193000760115E030C0809170019091710196019F
|
||||
:10194000281B390B80916E0190916F01E216F3060E
|
||||
:101950007CF09C0122503109129FC001139F900D11
|
||||
:1019600011240091560120915501409154010BC062
|
||||
:101970009C0122503109129FC001139F900D112428
|
||||
:1019800000E020E040E06E2D8A589E4F0E94EF005C
|
||||
:1019900021E0E21AF108E114F10469F6CAC161E03C
|
||||
:1019A0008091700190917101892B09F460E0209180
|
||||
:1019B0006E0130916F012250310947E0429FC00112
|
||||
:1019C000439F900D11248A559E4F0E94FE027DCCAC
|
||||
:1019D00020916E0130916F0122503109129FC00198
|
||||
:1019E000139F900D1124609170018A559E4F0E94A3
|
||||
:1019F000EC0283CC41E08091720190917301892BBC
|
||||
:101A000009F440E020916E0130916F0122503109BC
|
||||
:101A100057E0529FC001539F900D112460917001B7
|
||||
:101A20008A559E4F0E94CB0280CC20916E0130914E
|
||||
:101A30006F0122503109129FC001139F900D112494
|
||||
:101A4000609170018A559E4F0E94B20286CC90919F
|
||||
:101A5000720180E0609170017091710168277927AF
|
||||
:101A600020916E0130916F0122503109129FC00107
|
||||
:101A7000139F900D11248A559E4F0E94690285CCB8
|
||||
:101A800020916E0130916F0122503109129FC001E7
|
||||
:101A9000139F900D11248A559E4F0E94040380933A
|
||||
:101AA0005F019093600189CC20916E0130916F01AC
|
||||
:101AB00022503109C901880F991F820F931F60912D
|
||||
:101AC00070018C569E4F0E942703A8CC9091720102
|
||||
:101AD00080E06091700170917101682779272091F1
|
||||
:101AE0006E0130916F0122503109C901880F991F91
|
||||
:101AF000820F931FE12C00E024E040E08C569E4FC3
|
||||
:101B00000E94F803A3CC9091720180E06091700173
|
||||
:101B1000709171016827792720916E0130916F01D2
|
||||
:101B200022503109C901880F991F820F931FE12CA0
|
||||
:101B300000E024E041E08C569E4F0E94F8039ECCCA
|
||||
:101B400020916E0130916F0122503109C901880F37
|
||||
:101B5000991F820F931F609172018C569E4F0E94B5
|
||||
:101B60007304898320916E0130916F0122503109F5
|
||||
:101B7000C901880F991F820F931F2091700141E0C6
|
||||
:101B8000BE016F5F7F4F8C569E4F0E94AE038ECC7E
|
||||
:101B900080917201898320916E0130916F012250F2
|
||||
:101BA0003109C901880F991F820F931F209170017D
|
||||
:101BB00041E0BE016F5F7F4F8C569E4F0E94AE0387
|
||||
:101BC0008DCC80917001909171010AE010E0B80114
|
||||
:101BD0000E94DD1820916E0130916F012250310971
|
||||
:101BE000C901880F991F820F931F8C569E4F0E9428
|
||||
:101BF000730489838091700190917101B8010E94F2
|
||||
:101C0000DD1820916E0130916F0122503109A90138
|
||||
:101C1000440F551F420F531F682FCA018C569E4F09
|
||||
:101C20000E94730480688A8380917201909173018D
|
||||
:101C3000B8010E94DD1820916E0130916F01225091
|
||||
:101C40003109C901880F991F820F931F8C569E4F2F
|
||||
:101C50000E9473048B838091720190917301B8018B
|
||||
:101C60000E94DD1820916E0130916F0122503109E0
|
||||
:101C7000A901440F551F420F531F682FCA018C56EC
|
||||
:101C80009E4F0E9473048C8320916E0130916F01EE
|
||||
:101C900022503109C901880F991F820F931F20E03C
|
||||
:101CA00044E0BE016F5F7F4F8C569E4F0E94AE0393
|
||||
:101CB0002DCC10917001A0907201B0907301AA0C0C
|
||||
:101CC000BB1CAA0CBB1CC12CD12C59CC8FEF898317
|
||||
:101CD0008A838B838C8320916E0130916F01225017
|
||||
:101CE0003109C901880F991F820F931F20E044E03A
|
||||
:101CF000BE016F5F7F4F8C569E4F0E94AE035ACC41
|
||||
:101D000019821A821B821C8220916E0130916F0110
|
||||
:101D100022503109C901880F991F820F931F20E0BB
|
||||
:101D200044E0BE016F5F7F4F8C569E4F0E94AE0312
|
||||
:101D300059CC2C960FB6F894DEBF0FBECDBFDF9105
|
||||
:101D4000CF911F910F91FF90EF90DF90CF90BF90B8
|
||||
:101D5000AF90089520911B0230E080911C02281B57
|
||||
:101D60003109C901089580911C0290911B028917C5
|
||||
:101D700050F4E82FF0E0E35EFD4F208130E08F5F0C
|
||||
:101D800080931C0202C02FEF3FEFC9010895E0913C
|
||||
:101D90001C0280911B02E81730F4F0E0E35EFD4F77
|
||||
:101DA000208130E002C02FEF3FEFC9010895089570
|
||||
:101DB000E091F301F091F4013097E1F030911C02D1
|
||||
:101DC00020911B023217B0F040E009C0DC01A20FE5
|
||||
:101DD000B31F5C91D901A35EBD4F5C934F5F242F6D
|
||||
:101DE00030E02617370794F310921C0260931B0211
|
||||
:101DF000CB0109940895E091F501F091F601309737
|
||||
:101E000029F01092F9011092F80109940895CF92E7
|
||||
:101E1000DF92EF92FF920F931F93CF93DF937C019A
|
||||
:101E2000CB018A012091F701222391F0EB016B0194
|
||||
:101E3000C40ED51E09C06991D701ED91FC910190A6
|
||||
:101E4000F081E02DC7010995CC15DD05A1F703C090
|
||||
:101E5000642F0E948E10C801DF91CF911F910F91C6
|
||||
:101E6000FF90EF90DF90CF900895CF93DF931F9274
|
||||
:101E7000CDB7DEB769832091F7012223D1F02091FD
|
||||
:101E8000F801203240F021E030E0FC01338322836E
|
||||
:101E900020E030E015C08091F901E82FF0E0E65035
|
||||
:101EA000FE4F998190838F5F8093F9018093F801B1
|
||||
:101EB00005C061E0CE0101960E948E1021E030E065
|
||||
:101EC000C9010F90DF91CF910895FC011382128216
|
||||
:101ED00048EE53E060E070E0448355836683778387
|
||||
:101EE00084E391E091838083089510921C02109204
|
||||
:101EF0001B021092F9011092F8010C94D40FCF93A9
|
||||
:101F0000DF93EC01862F0E94F20F8BEF9EE00E9480
|
||||
:101F1000AC1088ED9EE00E94A710CE01DF91CF911A
|
||||
:101F20000C94750F0C947F0F862F413208F040E21D
|
||||
:101F30006DE172E00E94F60F10921C0280931B026A
|
||||
:101F4000089521E00C94940F81E08093F701609351
|
||||
:101F50001A021092F9011092F80108950C94A40F3E
|
||||
:101F60000F93062F21E04091F8016AEF71E0809114
|
||||
:101F70001A020E943B101092F9011092F80110927F
|
||||
:101F8000F7010F91089561E00C94B00F7093F40184
|
||||
:101F90006093F30108957093F6016093F50108953D
|
||||
:101FA00087EE91E00C94650F1092460281E08093D9
|
||||
:101FB00044021092430261E082E10E94D51261E086
|
||||
:101FC00083E10E94D512E9EBF0E080818E7F80836F
|
||||
:101FD00080818D7F808382E08093B80085E4809348
|
||||
:101FE000BC000895880F8093BA000895413208F02C
|
||||
:101FF0003FC0909146029111FCCF91E09093460230
|
||||
:10200000209344022FEF20933D0210924202242F8E
|
||||
:102010002150209341029093450290914502880FF0
|
||||
:10202000892B8093450280914302813041F41092C4
|
||||
:102030004302809145028093BB0085EC01C085EE90
|
||||
:102040008093BC00809146028130E1F3809142028E
|
||||
:10205000841710F44091420227E432E0FB01D901D9
|
||||
:1020600002C08D9181938A2F821B8417D0F301C007
|
||||
:1020700040E0842F08950F93413208F046C09091BC
|
||||
:1020800046029111FCCF92E09093460200934402E5
|
||||
:102090009FEF90933D021092420240934102FB0158
|
||||
:1020A00067E472E0DB0102C091919D939A2F961B29
|
||||
:1020B0009417D0F31092450290914502880F892B16
|
||||
:1020C0008093450280914302813041F41092430293
|
||||
:1020D000809145028093BB0085EC01C085EE809322
|
||||
:1020E000BC00222321F0809146028230E1F38091EE
|
||||
:1020F0003D028F3F61F080913D02803251F080912E
|
||||
:102100003D02803341F483E007C081E005C080E0F8
|
||||
:1021100003C082E001C084E00F910895613298F419
|
||||
:1021200020914602243089F460933F02FC0187E647
|
||||
:1021300092E0DC0102C021912D932A2F281B261743
|
||||
:10214000D0F380E0089581E0089582E008959093AF
|
||||
:10215000880280938702089590938A02809389026F
|
||||
:10216000089585ED8093BC008091BC0084FDFCCF78
|
||||
:1021700010924602089585EC8093BC0010924602AE
|
||||
:1021800008951F920F920FB60F9211242F933F9331
|
||||
:102190004F935F936F937F938F939F93AF93BF936F
|
||||
:1021A000EF93FF938091B900887F803609F49FC038
|
||||
:1021B00058F5883209F45BC090F4803109F452C0BC
|
||||
:1021C00038F4882309F4F8C0883009F0F9C04AC00F
|
||||
:1021D000883109F44CC0803209F0F2C05CC0803410
|
||||
:1021E00009F46BC038F4803309F455C0883309F022
|
||||
:1021F000E7C054C0803509F454C0883509F462C082
|
||||
:10220000883409F0DDC0DAC0883909F4CBC0A8F4FD
|
||||
:10221000883709F46CC038F4883609F468C0803710
|
||||
:1022200009F0CEC064C0883809F4BCC0803909F414
|
||||
:1022300064C0803809F0C4C060C0803B09F48AC023
|
||||
:1022400038F4803A09F46BC0883A09F0B9C082C00A
|
||||
:10225000803C09F4ABC0883C09F4A8C0883B09F075
|
||||
:10226000AFC08DC0809145028093BB0012C0909199
|
||||
:10227000420280914102981788F580914202E82F2E
|
||||
:10228000F0E0E95BFD4F90819093BB008F5F8093FE
|
||||
:10229000420285EC88C080933D0290C080933D024D
|
||||
:1022A00056C0809142029091BB00E82FF0E0E95BBC
|
||||
:1022B000FD4F90838F5F8093420290914202809104
|
||||
:1022C00041026DC0809142029091BB00E82FF0E086
|
||||
:1022D000E95BFD4F90838F5F8093420280914402BF
|
||||
:1022E00081116CC081E08093430284EA60C083E086
|
||||
:1022F0008093460210923E02CCCF80913E02803203
|
||||
:1023000008F050C080913E029091BB00E82FF0E0B1
|
||||
:10231000E557FD4F90838F5F80933E02BACF809147
|
||||
:102320003E02803230F4E0913E02F0E0E557FD4F8E
|
||||
:1023300010820E94B11060913E02E0918702F091FC
|
||||
:10234000880270E08BE892E0099510923E020E94AC
|
||||
:10235000BB1036C084E08093460210924002109277
|
||||
:102360003F02E0918902F0918A02099580913F0233
|
||||
:10237000811105C081E080933F0210926702809135
|
||||
:102380004002E82FF0E0E959FD4F90819093BB00A7
|
||||
:102390008F5F809340029091400280913F02981796
|
||||
:1023A00008F477CF85E88093BC000AC085EC809361
|
||||
:1023B000BC001092460204C010923D020E94B1106F
|
||||
:1023C000FF91EF91BF91AF919F918F917F916F910D
|
||||
:1023D0005F914F913F912F910F900FBE0F901F90E3
|
||||
:1023E00018958E3008F08E5087702091060140E4D9
|
||||
:1023F000249F90011124822B80937C0080917A008D
|
||||
:10240000806480937A0080917A0086FDFCCF2091D1
|
||||
:10241000780030917900932F80E0AC01422B9A0133
|
||||
:10242000C90108951F93CF93DF93182FEB0161E04B
|
||||
:102430000E949D12209711F460E004C0CF3FD105A7
|
||||
:1024400039F461E0812FDF91CF911F910C94D51267
|
||||
:10245000E12FF0E0E859FF4FE491E330B9F028F4C0
|
||||
:10246000E13051F0E230B1F50CC0E63019F1E7305F
|
||||
:1024700049F1E43079F514C084B5806884BDC7BDE6
|
||||
:102480002EC084B5806284BDC8BD29C08091800003
|
||||
:10249000806880938000D0938900C09388001FC01B
|
||||
:1024A00080918000806280938000D0938B00C093E5
|
||||
:1024B0008A0015C08091B00080688093B000C093FE
|
||||
:1024C000B3000DC08091B00080628093B000C093D3
|
||||
:1024D000B40005C0C038D1050CF0B3CFADCFDF914B
|
||||
:1024E000CF911F910895833069F028F48130A1F0D5
|
||||
:1024F000823011F514C08630B1F08730C1F08430DD
|
||||
:10250000D9F404C0809180008F7703C0809180004F
|
||||
:102510008F7D80938000089584B58F7702C084B545
|
||||
:102520008F7D84BD08958091B0008F7703C0809126
|
||||
:10253000B0008F7D8093B0000895CF93DF9390E03B
|
||||
:10254000FC01E458FF4F4491FC01E057FF4F849198
|
||||
:10255000882341F190E0880F991FFC01E854FF4F58
|
||||
:1025600025913491D90182559F4FFC018591949119
|
||||
:10257000C82FD92F9FB7F8948C91611106C0409550
|
||||
:1025800084238C938881842308C0623041F4242FF3
|
||||
:10259000209582238C938881842B888302C0842B8E
|
||||
:1025A0008C939FBFDF91CF9108950F931F93CF938B
|
||||
:1025B000DF931F92CDB7DEB7282F30E0F901E8593D
|
||||
:1025C000FF4F8491F901E458FF4F1491F901E0574E
|
||||
:1025D000FF4F04910023D1F0882321F069830E94EA
|
||||
:1025E00073126981E02FF0E0EE0FFF1FE255FF4FFD
|
||||
:1025F00085919491DC019FB7F8948C91611103C08F
|
||||
:102600001095812301C0812B8C939FBF0F90DF9188
|
||||
:10261000CF911F910F910895CF93DF93282F30E032
|
||||
:10262000F901E859FF4F8491F901E458FF4FD49123
|
||||
:10263000F901E057FF4FC491CC2389F081110E942A
|
||||
:102640007312EC2FF0E0EE0FFF1FEC55FF4F85915A
|
||||
:102650009491DC018C918D2321E030E011F420E095
|
||||
:1026600030E0C901DF91CF9108958F929F92AF9290
|
||||
:10267000BF92CF92DF92EF92FF920F931F93CF936F
|
||||
:10268000DF9390E0FC01E458FF4FD491FC01E05748
|
||||
:10269000FF4F7491611102C0C0E001C0CD2FDA017B
|
||||
:1026A000C901880F991FAA1FBB1F54E0B695A795B3
|
||||
:1026B000979587955A95D1F7672F70E0660F771F2A
|
||||
:1026C0006C557F4F812C912C5401FB010591149185
|
||||
:1026D00010C0C12CD12C7601C394C80CD91CEA1CA3
|
||||
:1026E000FB1C88169906AA06BB0609F448C04601D9
|
||||
:1026F0005701F801E081ED23EC1759F310C0C12C0C
|
||||
:10270000D12C7601C394C80CD91CEA1CFB1C88167A
|
||||
:102710009906AA06BB0699F14601570103C0FB01C1
|
||||
:1027200005911491F801E081ED23EC13E8CF8819AD
|
||||
:102730009909AA09BB0920E030E0A901FB016591D4
|
||||
:10274000749109C0281739074A075B07C1F02F5F4A
|
||||
:102750003F4F4F4F5F4FFB01E081ED23EC1791F3AB
|
||||
:10276000A5E1B0E00E94D2188B019C01005F1F4FD1
|
||||
:102770002F4F3F4F369527951795079503C000E0DB
|
||||
:1027800010E09801B801C901DF91CF911F910F911D
|
||||
:10279000FF90EF90DF90CF90BF90AF909F908F9081
|
||||
:1027A00008951F920F920FB60F9211242F933F930B
|
||||
:1027B0008F939F93AF93BF938091AB029091AC02A4
|
||||
:1027C000A091AD02B091AE023091B302232F285EEA
|
||||
:1027D0002D3720F40896A11DB11D05C0232F2556C5
|
||||
:1027E0000996A11DB11D2093B3028093AB02909373
|
||||
:1027F000AC02A093AD02B093AE028091AF02909173
|
||||
:10280000B002A091B102B091B2020196A11DB11D1A
|
||||
:102810008093AF029093B002A093B102B093B20242
|
||||
:10282000BF91AF919F918F913F912F910F900FBECC
|
||||
:102830000F901F9018950F931F938FB7F8940091E6
|
||||
:10284000AB021091AC022091AD023091AE028FBF6D
|
||||
:10285000B801C9011F910F9108950F931F939FB75E
|
||||
:10286000F8940091AF021091B0022091B102309122
|
||||
:10287000B20286B5A89B06C08F3F21F00F5F1F4FA5
|
||||
:102880002F4F3F4F9FBF322F212F102F0027080FB0
|
||||
:10289000111D211D311D45E0000F111F221F331F87
|
||||
:1028A0004A95D1F7B801C9011F910F910895CF92B0
|
||||
:1028B000DF92EF92FF92CF93DF936B017C010E9436
|
||||
:1028C0002D14EB010EC00E942D146C1B7D0B683E75
|
||||
:1028D000734038F081E0C81AD108E108F108C85106
|
||||
:1028E000DC4FC114D104E104F10469F7DF91CF9109
|
||||
:1028F000FF90EF90DF90CF900895019739F0019706
|
||||
:1029000029F0880F991F01970197F1F7089578949E
|
||||
:1029100084B5826084BD84B5816084BD85B58260E4
|
||||
:1029200085BD85B5816085BDEEE6F0E08081816082
|
||||
:102930008083E1E8F0E01082808182608083E0E8BB
|
||||
:10294000F0E0808181608083E1EBF0E08081846051
|
||||
:102950008083E0EBF0E0808181608083EAE7F0E053
|
||||
:1029600080818460808380818260808380818160B7
|
||||
:1029700080838081806880831092C1000895CF9207
|
||||
:10298000DF92EF92FF920F931F93CF93DF936C012F
|
||||
:10299000EB017A01E60EF71E00E010E00BC0699132
|
||||
:1029A000D601ED91FC910190F081E02DC6010995D1
|
||||
:1029B000080F191FCE15DF0591F7C801DF91CF91E0
|
||||
:1029C0001F910F91FF90EF90DF90CF900895DB0162
|
||||
:1029D0000D900020E9F7AD0141505109461B570BFE
|
||||
:1029E000DC01ED91FC910280F381E02D09940C94BF
|
||||
:1029F000E714DC01ED91FC910190F081E02D099448
|
||||
:102A00000F931F93CF93DF93EC016DE00E94F914B5
|
||||
:102A10008C016AE0CE010E94F9149C01200F311F45
|
||||
:102A2000C901DF91CF911F910F9108950F931F93CB
|
||||
:102A3000CF93DF93EC010E94E7148C01CE010E943A
|
||||
:102A400000159801280F391FC901DF91CF911F91FF
|
||||
:102A50000F9108950E9487140E948C07C6E0D6E16A
|
||||
:102A60000E94AC072097E1F30E940616F9CFFC0103
|
||||
:102A700084859585FC01E05CFF4F20813181FC015C
|
||||
:102A8000EE5BFF4F80819181281B390B2F73332719
|
||||
:102A9000C9010895FC0184859585FC01E05CFF4F28
|
||||
:102AA00040815181FC01EE5BFF4F20813181421753
|
||||
:102AB000530741F00190F081E02DE80FF91F2081CC
|
||||
:102AC00030E002C02FEF3FEFC9010895FC0184857B
|
||||
:102AD0009585FC01E05CFF4F40815181FC01EE5B7C
|
||||
:102AE000FF4F208131814217530781F0A081B181CE
|
||||
:102AF000A80FB91F8C91208131812F5F3F4F2F7319
|
||||
:102B0000332731832083282F30E002C02FEF3FEF9F
|
||||
:102B1000C9010895FC0186859785FC01E05CFF4FA3
|
||||
:102B2000DC01AE5BBF4F408151812D913C911197EB
|
||||
:102B300042175307C1F70895CF93DF93FC018685B1
|
||||
:102B40009785DC01A05CBF4F2D913C9111972F5FC1
|
||||
:102B50003F4F2F733327EC01CE5BDF4F4881598104
|
||||
:102B600024173507D9F30D90BC91A02DA80FB91FDC
|
||||
:102B70006C93A685B785A05CBF4F11963C932E93AE
|
||||
:102B8000A689B7892C9181E090E0058C02C0880F5E
|
||||
:102B9000991F0A94E2F7282B2C9381E090E0DF91B3
|
||||
:102BA000CF91089508951F920F920FB60F9211249E
|
||||
:102BB0002F933F934F938F939F93EF93FF93409166
|
||||
:102BC000C600809157039091580301968F739927FF
|
||||
:102BD0002091590330915A038217930759F0E091DD
|
||||
:102BE0005703F0915803E95EFC4F408390935803DC
|
||||
:102BF00080935703FF91EF919F918F914F913F9158
|
||||
:102C00002F910F900FBE0F901F90189584EB92E0BC
|
||||
:102C10000E943715892B11F00C94D21508951F923C
|
||||
:102C20000F920FB60F9211242F933F938F939F9380
|
||||
:102C3000EF93FF93209113033091140380911503B8
|
||||
:102C4000909116032817390731F48091C1008F7DC8
|
||||
:102C50008093C10014C0E0911503F0911603ED526A
|
||||
:102C6000FD4F2081809115039091160301968F737B
|
||||
:102C7000992790931603809315032093C600FF9124
|
||||
:102C8000EF919F918F913F912F910F900FBE0F90D9
|
||||
:102C90001F901895CF92DF92EF92FF92CF93DF9320
|
||||
:102CA000EC016A017B01EC89FD8981E090E00E8CEA
|
||||
:102CB00002C0880F991F0A94E2F7808360E271EAEC
|
||||
:102CC00087E090E0A70196010E94F1182150310998
|
||||
:102CD000410951095695479537952795211580E16A
|
||||
:102CE000380798F0EC89FD89108260E970ED83E087
|
||||
:102CF00090E0A70196010E94F11821503109410985
|
||||
:102D000051095695479537952795E889F989308374
|
||||
:102D1000EA89FB892083EE89FF89408181E090E088
|
||||
:102D20009C010A8C02C0220F331F0A94E2F7422B47
|
||||
:102D30004083EE89FF8940819C010B8C02C0220FE9
|
||||
:102D4000331F0A94E2F7422B4083EE89FF894081CA
|
||||
:102D50009C010C8C02C0220F331F0A94E2F7422B15
|
||||
:102D60004083EE89FF8920810D8C02C0880F991F56
|
||||
:102D70000A94E2F7809582238083DF91CF91FF90C0
|
||||
:102D8000EF90DF90CF9008951092B7021092B602A4
|
||||
:102D900088EE93E0A0E0B0E08093B8029093B9028F
|
||||
:102DA000A093BA02B093BB0284E491E09093B50281
|
||||
:102DB0008093B40287E193E09093C1028093C002B4
|
||||
:102DC00083ED92E09093C3028093C20285EC90E081
|
||||
:102DD0009093C5028093C40284EC90E09093C70264
|
||||
:102DE0008093C60280EC90E09093C9028093C80261
|
||||
:102DF00081EC90E09093CB028093CA0286EC90E045
|
||||
:102E00009093CD028093CC0284E08093CE0283E045
|
||||
:102E10008093CF0287E08093D00285E08093D10237
|
||||
:102E200081E08093D20208955058BB27AA270ED084
|
||||
:102E30001CC10DD130F012D120F031F49F3F11F4BC
|
||||
:102E40001EF402C10EF4E095E7FBF8C0E92F1ED195
|
||||
:102E500080F3BA17620773078407950718F071F4B7
|
||||
:102E60009EF536C10EF4E0950B2EBA2FA02D0B0166
|
||||
:102E7000B90190010C01CA01A0011124FF27591BBF
|
||||
:102E800099F0593F50F4503E68F11A16F040A22FC5
|
||||
:102E9000232F342F4427585FF3CF46953795279536
|
||||
:102EA000A795F0405395C9F77EF41F16BA0B620B35
|
||||
:102EB000730B840BBAF09150A1F0FF0FBB1F661F7C
|
||||
:102EC000771F881FC2F70EC0BA0F621F731F841FBF
|
||||
:102ED00048F4879577956795B795F7959E3F08F0E5
|
||||
:102EE000B3CF9395880F08F09927EE0F97958795A4
|
||||
:102EF00008950CD0BAC0B2D040F0A9D030F021F47F
|
||||
:102F00005F3F19F09BC05111E4C09EC0BFD098F341
|
||||
:102F10009923C9F35523B1F3951B550BBB27AA275A
|
||||
:102F200062177307840738F09F5F5F4F220F331FCC
|
||||
:102F3000441FAA1FA9F333D00E2E3AF0E0E830D098
|
||||
:102F400091505040E695001CCAF729D0FE2F27D09B
|
||||
:102F5000660F771F881FBB1F261737074807AB0769
|
||||
:102F6000B0E809F0BB0B802DBF01FF2793585F4FDE
|
||||
:102F70002AF09E3F510568F061C0ABC05F3FECF3A3
|
||||
:102F8000983EDCF3869577956795B795F7959F5FA3
|
||||
:102F9000C9F7880F911D9695879597F90895E1E0F7
|
||||
:102FA000660F771F881FBB1F621773078407BA0756
|
||||
:102FB00020F0621B730B840BBA0BEE1F88F7E095B1
|
||||
:102FC0000895E89409C097FB3EF49095809570951C
|
||||
:102FD00061957F4F8F4F9F4F9923A9F0F92F96E965
|
||||
:102FE000BB279395F695879577956795B795F111DA
|
||||
:102FF000F8CFFAF4BB0F11F460FF1BC06F5F7F4F77
|
||||
:103000008F4F9F4F16C0882311F096E911C0772388
|
||||
:1030100021F09EE8872F762F05C0662371F096E891
|
||||
:10302000862F70E060E02AF09A95660F771F881F60
|
||||
:10303000DAF7880F9695879597F9089597F99F671E
|
||||
:1030400080E870E060E008959FEF80EC0895002430
|
||||
:103050000A941616170618060906089500240A94FD
|
||||
:1030600012161306140605060895092E0394000C83
|
||||
:1030700011F4882352F0BB0F40F4BF2B11F460FF12
|
||||
:1030800004C06F5F7F4F8F4F9F4F089557FD90583B
|
||||
:10309000440F551F59F05F3F71F04795880F97FB1C
|
||||
:1030A000991F61F09F3F79F08795089512161306D6
|
||||
:1030B0001406551FF2CF4695F1DF08C01616170605
|
||||
:1030C0001806991FF1CF869571056105089408953A
|
||||
:1030D000E894BB2766277727CB0197F908950BD093
|
||||
:1030E000C4CFB5DF28F0BADF18F0952309F0A6CFDA
|
||||
:1030F000ABCF1124EECFCADFA0F3959FD1F3950F8C
|
||||
:1031000050E0551F629FF001729FBB27F00DB11D6B
|
||||
:10311000639FAA27F00DB11DAA1F649F6627B00DFB
|
||||
:10312000A11D661F829F2227B00DA11D621F739FE4
|
||||
:10313000B00DA11D621F839FA00D611D221F749FF2
|
||||
:103140003327A00D611D231F849F600D211D822F39
|
||||
:10315000762F6A2F11249F5750408AF0E1F0882380
|
||||
:103160004AF0EE0FFF1FBB1F661F771F881F91508D
|
||||
:103170005040A9F79E3F510570F060CFAACF5F3F46
|
||||
:10318000ECF3983EDCF3869577956795B795F795C0
|
||||
:10319000E7959F5FC1F7FE2B880F911D9695879548
|
||||
:1031A00097F908950E942F19A59F900DB49F900D37
|
||||
:1031B000A49F800D911D1124089597FB072E16F4EE
|
||||
:1031C000009407D077FD09D00E943B1907FC05D079
|
||||
:1031D0003EF4909581959F4F0895709561957F4F2E
|
||||
:1031E0000895A1E21A2EAA1BBB1BFD010DC0AA1F48
|
||||
:1031F000BB1FEE1FFF1FA217B307E407F50720F060
|
||||
:10320000A21BB30BE40BF50B661F771F881F991FDA
|
||||
:103210001A9469F760957095809590959B01AC0123
|
||||
:10322000BD01CF010895052E97FB16F4009407D039
|
||||
:1032300057FD0DD00E94F11807FC09D07EF490953F
|
||||
:103240008095709561957F4F8F4F9F4F0895509552
|
||||
:103250004095309521953F4F4F4F5F4F0895A29F66
|
||||
:10326000B001B39FC001A39F01D0B29F700D811D1B
|
||||
:103270001124911D0895AA1BBB1B51E107C0AA1F71
|
||||
:10328000BB1FA617B70710F0A61BB70B881F991F07
|
||||
:103290005A95A9F780959095BC01CD010895EE0F40
|
||||
:1032A000FF1F0590F491E02D09940F931F93CF9386
|
||||
:1032B000DF93689F8001699F100D789F100D112486
|
||||
:1032C000C8010E947319C82FD92F209731F0A80187
|
||||
:1032D00060E070E08C2F0E94AA1ACE01DF91CF919E
|
||||
:1032E0001F910F9108950F931F93CF93DF93823017
|
||||
:1032F000910510F482E090E0E0915D03F0915E03AF
|
||||
:1033000020E030E0C0E0D0E023C040815181481788
|
||||
:103310005907A8F04817590761F4828193812097D3
|
||||
:1033200019F09B838A832EC090935E0380935D0384
|
||||
:1033300029C02115310529F04217530710F0A901C2
|
||||
:1033400002C0BE01DF0102811381EF019A01F80181
|
||||
:103350003097D9F62115310509F1281B390B243096
|
||||
:10336000310590F412968D919C911397611571051A
|
||||
:1033700021F0FB019383828304C090935E038093CA
|
||||
:103380005D03FD01329644C0FD01E20FF31F8193FE
|
||||
:103390009193225031092D933C933AC020915B03C5
|
||||
:1033A00030915C03232B41F4209102013091030101
|
||||
:1033B00030935C0320935B03209100013091010165
|
||||
:1033C0002115310541F42DB73EB7409104015091CC
|
||||
:1033D0000501241B350BE0915B03F0915C03E217C0
|
||||
:1033E000F307A0F42E1B3F0B2817390778F0AC0128
|
||||
:1033F0004E5F5F4F2417350748F04E0F5F1F509305
|
||||
:103400005C0340935B038193919302C0E0E0F0E0A2
|
||||
:10341000CF01DF91CF911F910F910895EF92FF920D
|
||||
:103420000F931F93CF93DF93009709F48EC0DC01B5
|
||||
:10343000129713961C921E921297E0905D03F090E3
|
||||
:103440005E03E114F10489F42D913C911197280F4A
|
||||
:10345000391F80915B0390915C038217930789F574
|
||||
:10346000B0935C03A0935B0370C0E70120E030E001
|
||||
:1034700001C0EA01CA17DB0738F44A815B819E016B
|
||||
:1034800041155105B1F722C0AC0142505109FA0172
|
||||
:10349000D383C28300811181BC01600F711F6C173F
|
||||
:1034A0007D0761F468817981600F711F6E5F7F4FC6
|
||||
:1034B000718360836A817B81738362832115310507
|
||||
:1034C00029F4B0935E03A0935D033FC0F901B38379
|
||||
:1034D000A283E90149915991C40FD51FAC17BD07CB
|
||||
:1034E00071F4DC019E918E91840F951F0296918359
|
||||
:1034F000808312968D919C91139793838283A0E091
|
||||
:10350000B0E002C0D7017C01F7018281938100976E
|
||||
:10351000C9F7C701029620813181820F931F209144
|
||||
:103520005B0330915C032817390779F4109729F46D
|
||||
:1035300010925E0310925D0304C013961C921E92BB
|
||||
:103540001297F0925C03E0925B03CDB7DEB7E6E042
|
||||
:103550000C94BD1ADC0101C06D9341505040E0F75E
|
||||
:1035600008952A88398848885F846E847D848C8495
|
||||
:103570009B84AA84B984C884DF80EE80FD800C819E
|
||||
:103580001B81AA81B981CE0FD11D0FB6F894DEBF81
|
||||
:0C3590000FBECDBFED010895F894FFCFF1
|
||||
:10359C0000005F0320000101000A006400E8033F03
|
||||
:1035AC00065B4F666D7D077F6F777C395E79715254
|
||||
:1035BC00656164206661696C005265616479210003
|
||||
:1035CC0000000000350F070FAA0EB30EC70ED70E62
|
||||
:1035DC00000000009C15BF14371566154A158A1596
|
||||
:00000001FF
|
||||
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr5.cpp.hex
Normal file
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr5.cpp.hex
Normal file
|
|
@ -0,0 +1,864 @@
|
|||
:100000000C9463000C948B000C948B000C948B006C
|
||||
:100010000C948B000C948B000C948B000C948B0034
|
||||
:100020000C948B000C948B000C948B000C948B0024
|
||||
:100030000C948B000C948B000C948B000C948B0014
|
||||
:100040000C94D1130C948B000C94D3150C940F16B4
|
||||
:100050000C948B000C948B000C948B000C948B00F4
|
||||
:100060000C94C1100C948B000000000700020100EA
|
||||
:100070000003040600000000000000000102040864
|
||||
:100080001020408001020408102001020408102002
|
||||
:10009000040404040404040402020202020203032E
|
||||
:1000A00003030303000000002300260029000000D2
|
||||
:1000B0000000250028002B0000000000240027007D
|
||||
:1000C0002A00D00FC41611241FBECFEFD8E0DEBF28
|
||||
:1000D000CDBF11E0A0E0B1E0ECE9F5E302C005908E
|
||||
:1000E0000D92A035B107D9F713E0A0E5B1E001C04A
|
||||
:1000F0001D92AF35B107E1F710E0C6ECD0E004C0C7
|
||||
:100100002297FE010E945119C23CD107C9F70E94F3
|
||||
:100110002A150C94CC1A0C940000CF93DF93EC01B9
|
||||
:1001200060E088810E94D51284E190E00E947D14F5
|
||||
:1001300061E088810E94D51284E190E0DF91CF9147
|
||||
:100140000C947D140F931F93CF93DF93EC01062F34
|
||||
:1001500018E007FF02C061E001C060E089810E94F1
|
||||
:10016000D512CE010E948D00000F115091F7DF9142
|
||||
:10017000CF911F910F910895EF92FF921F93CF930C
|
||||
:10018000DF9300D0CDB7DEB77C01162F27FF02C06A
|
||||
:1001900060EC01C060EE26FF606147FF686046FFCB
|
||||
:1001A000646017FF626016FF6160C70129834A839C
|
||||
:1001B0000E94A2002981622FC7010E94A2004A81E9
|
||||
:1001C000642FC7010E94A200612FC7010F900F90FA
|
||||
:1001D000DF91CF911F91FF90EF900C94A2007F923E
|
||||
:1001E0008F929F92AF92BF92CF92DF92EF92FF9247
|
||||
:1001F0000F931F93CF93DF93EC01162F942E822E33
|
||||
:1002000060E00E94A20060E0CE010E94A20060E0D7
|
||||
:10021000CE010E94A20060E0CE010E94A20083E015
|
||||
:10022000189F7001112467018FEFC81AD80A57016F
|
||||
:1002300082E0A80EB11C712C1FC071120FC0EB819F
|
||||
:10024000FC81EE0DFF1D9082EB81FC81EC0DFD1D0C
|
||||
:100250008082EB81FC81EA0DFB1D0083EB81FC8138
|
||||
:1002600083E0789EE00DF11D11242281418160819F
|
||||
:10027000CE010E94BC0073948A817816F0F260E08F
|
||||
:10028000CE010E94A20060E0CE010E94A20060E0C8
|
||||
:10029000CE010E94A20060E0CE01DF91CF911F91BC
|
||||
:1002A0000F91FF90EF90DF90CF90BF90AF909F9015
|
||||
:1002B0008F907F900C94A2000F931F93CF93DF93A6
|
||||
:1002C000EC01862F688349832A8361E00E949D1296
|
||||
:1002D00061E089810E949D128A8161E070E023E0E3
|
||||
:1002E000829FC00111240E9455198B839C8310E0CA
|
||||
:1002F00008C000E020E040E0612FCE010E94EF0046
|
||||
:100300001F5F8A811817A8F3DF91CF911F910F917A
|
||||
:100310000895FC018281089587EE91E00C94750F99
|
||||
:10032000CF93DF93EC0168E670E087EE91E00E94E6
|
||||
:10033000AE0F60E087EE91E00E94350F87EE91E00E
|
||||
:100340000E94C30F47E050E068E670E087EE91E05E
|
||||
:100350000E94A10F87EE91E00E94B30E382F3695D0
|
||||
:10036000369536953E70232F220F220F230F8F7064
|
||||
:100370009927280F288387EE91E00E94B30E282F3B
|
||||
:1003800022952F708F7099273AE0239F800D1124BA
|
||||
:10039000898387EE91E00E94B30E382F369536950B
|
||||
:1003A00036953670232F220F220F230F8F70992737
|
||||
:1003B000280F2A8387EE91E00E94B30E282F229502
|
||||
:1003C0002F708F7099273AE0239F800D11248B8323
|
||||
:1003D00087EE91E00E94B30E282F22952F708F7028
|
||||
:1003E00099273AE0239F800D11248C8387EE91E0BA
|
||||
:1003F0000E94B30E282F22952F708F7099273AE014
|
||||
:10040000239F800D11248D8387EE91E00E94B30E0F
|
||||
:10041000282F22952F708F7099273AE0239F800D07
|
||||
:1004200011248E831F82DF91CF910895CF93DF93A4
|
||||
:10043000EC01862F688319824A831B822C831E82DB
|
||||
:100440001D8261E00E949D1261E08A81DF91CF915F
|
||||
:100450000C949D121F93CF93DF93EC0160E08A818F
|
||||
:100460000E94D5128AE090E00E947D1414E061E0C1
|
||||
:100470008A810E94D51260E08A810E94D5121150B3
|
||||
:10048000B1F7DF91CF911F910895FF920F931F93C2
|
||||
:10049000CF93DF93EC018B0190E1F92E612F661F62
|
||||
:1004A0006627661F8A810E94D51288810E940C13DC
|
||||
:1004B00061E0892B09F060E088810E94D512000F6D
|
||||
:1004C000111FFA9459F7DF91CF911F910F91FF906F
|
||||
:1004D0000895EF92FF920F931F93CF93DF93EC0158
|
||||
:1004E0007B01CB0193709E838D8360E070E0CE0131
|
||||
:1004F0000E94450200E010E08C81882351F0C70182
|
||||
:10050000002E02C0880F991F0A94E2F791FF0DC0D8
|
||||
:1005100009C0C701002E02C0969587950A94E2F79C
|
||||
:1005200080FF03C06FEF70E002C060E070E0CE01BA
|
||||
:100530000E9445020F5F1F4F0A301105E9F660E087
|
||||
:1005400070E0CE010E94450260E070E0CE010E94A2
|
||||
:100550004502CE01DF91CF911F910F91FF90EF9057
|
||||
:100560000C942A02662321F06B3018F06AE001C077
|
||||
:1005700061E0262F215061E070E002C0660F771F16
|
||||
:100580002A95E2F7FC01258136816227732776835D
|
||||
:1005900065830C946902662321F06B3018F06AE0E1
|
||||
:1005A00001C061E0562F5150FC012581368161E088
|
||||
:1005B00070E002C0660F771F5A95E2F7442319F0E6
|
||||
:1005C000622B732B04C06095709562237323FC012A
|
||||
:1005D000768365830C9469026B3008F06AE02FEF34
|
||||
:1005E0003FEF02C0220F331F6A95E2F72095309546
|
||||
:1005F000FC0136832583B9010C946902FC016483F4
|
||||
:10060000658176810C946902FC018581968108954B
|
||||
:10061000FC0181E020813181232B09F480E00895E1
|
||||
:10062000CF93DF93EC01862F6883498360E00E94BB
|
||||
:100630009D1260E089810E949D1260E088810E9485
|
||||
:10064000D51260E08981DF91CF910C94D51268308A
|
||||
:1006500010F4685F01C06FE0FC016283089561E0FF
|
||||
:10066000FC0181810E949D1282E390E00C947D1434
|
||||
:10067000CF93DF93EC0161E089810E949D1282E3B8
|
||||
:1006800090E00E947D1460E088810E949D1282E3C8
|
||||
:1006900090E00E947D1460E089810E949D1282E3B7
|
||||
:1006A00090E0DF91CF910C947D140F931F93CF9323
|
||||
:1006B000DF93EC01062F18E061E088810E949D1213
|
||||
:1006C00082E390E00E947D1400FF02C060E001C060
|
||||
:1006D00061E089810E949D1282E390E00E947D1476
|
||||
:1006E00060E088810E949D1282E390E00E947D1468
|
||||
:1006F0000695115009F761E088810E949D1260E023
|
||||
:1007000089810E949D1282E390E00E947D1460E046
|
||||
:1007100088810E949D1282E390E00E947D1489816D
|
||||
:100720000E940C13182F811104C061E089810E947E
|
||||
:100730009D1282E390E00E947D1461E088810E9416
|
||||
:100740009D1282E390E00E947D1481E0111101C0AE
|
||||
:1007500080E0DF91CF911F910F910895CF92DF92AA
|
||||
:10076000EF92FF920F931F93CF93DF9300D0CDB7FB
|
||||
:10077000DEB76C01F62EE42E29837A830E942F03C4
|
||||
:1007800060E4C6010E945503C6010E943803C601F9
|
||||
:100790000E942F032981622F63706054C6010E945A
|
||||
:1007A00055030F2D7A81172F06C0F80161918F0133
|
||||
:1007B000C6010E945503802F8F198E15B0F3C60114
|
||||
:1007C0000E943803C6010E942F03F601628160581F
|
||||
:1007D000C6010E945503C6010F900F90DF91CF9183
|
||||
:1007E0001F910F91FF90EF90DF90CF900C94380302
|
||||
:1007F0004F925F926F927F928F929F92AF92BF9231
|
||||
:10080000CF92DF92EF920F931F93CF93DF9300D09D
|
||||
:1008100000D0CDB7DEB73C016B01322F202F8FE027
|
||||
:10082000A82E81E0B82E88248394912C8C0E9D1ED6
|
||||
:10083000F40101E01FE3D5015E904E905D01C60119
|
||||
:10084000B2010E94DD186115710561F4411106C005
|
||||
:10085000002321F08E2F8819833011F4108313C0E8
|
||||
:10086000108211C0DB01AF70BB27A15FBE4F8C911E
|
||||
:100870008083649DC001659D900D749D900D112431
|
||||
:10088000C81AD90A00E0EE2039F08E2F881981307D
|
||||
:1008900019F48081806880833196B7E0AB16B1E0AF
|
||||
:1008A000BB0649F684E090E0831B9109BE016F5FAF
|
||||
:1008B0007F4F680F791F432FC3010E94AE030F9033
|
||||
:1008C0000F900F900F90DF91CF911F910F91EF90AC
|
||||
:1008D000DF90CF90BF90AF909F908F907F906F9060
|
||||
:1008E0005F904F9008956F70E62FF0E0E15FFE4F4C
|
||||
:1008F00080810895FC0181E09081911101C080E028
|
||||
:1009000008951F93CF93DF931F92CDB7DEB7162FB5
|
||||
:1009100087EE91E049830E94750F6CE470E087EEEA
|
||||
:1009200091E00E94AE0F612F87EE91E00E94350F9B
|
||||
:100930004981642F87EE91E00E94350F87EE91E0A8
|
||||
:100940000F90DF91CF911F910C94C30F462F67E05A
|
||||
:100950000C948104462F68E00C948104CF93DF93BC
|
||||
:10096000EC0160E00E94A60460E0CE010E94AA04AF
|
||||
:1009700061E0CE01DF91CF910C94A6044F925F927B
|
||||
:100980006F927F928F929F92AF92BF92CF92DF929F
|
||||
:10099000EF92FF920F931F93CF93DF9300D01F929C
|
||||
:1009A000CDB7DEB75B016A01790180E48B838A836E
|
||||
:1009B00089830E941B142B013C010DC00E941B1453
|
||||
:1009C0006419750986099709653F7140810591058C
|
||||
:1009D00014F080E06EC087EE91E00E94AA0E181617
|
||||
:1009E000190664F387EE91E00E94B30E43E050E0F5
|
||||
:1009F0006CE470E087EE91E00E94A10F0E941B144E
|
||||
:100A00002B013C018E010F5F1F4F48012DC0C80113
|
||||
:100A1000881999090397D4F40E941B142B013C01F7
|
||||
:100A200011C087EE91E00E94B30EF80180830E940E
|
||||
:100A30001B146419750986099709633371058105CB
|
||||
:100A400091053CF6F8018081803458F70E941B1410
|
||||
:100A50000F5F1F4F6419750986099709653F71403B
|
||||
:100A6000810591050CF0B5CF87EE91E00E94AA0EAA
|
||||
:100A7000892B69F69981892F880F880F95FD8D5FE5
|
||||
:100A800085958595F50180839A81892F880F880F38
|
||||
:100A900095FD8D5F85958595F60180839B81892FD6
|
||||
:100AA000880F880F95FD8D5F85958595F70180836B
|
||||
:100AB00081E00F900F900F90DF91CF911F910F91D8
|
||||
:100AC000FF90EF90DF90CF90BF90AF909F908F906E
|
||||
:100AD0007F906F905F904F900895CF93DF93EC01DC
|
||||
:100AE000862F6E834F83288791E09D8760E00E9468
|
||||
:100AF0009D1261E08E810E94D51219861A861B868E
|
||||
:100B00001C86DF91CF910895DF92EF92FF920F93B1
|
||||
:100B10001F93CF93DF93EC0161E08E810E94D51289
|
||||
:100B20006AEF70E080E090E00E9457140E941B146E
|
||||
:100B300009851A852B853C85601771078207930705
|
||||
:100B400020F419861A861B861C862D85211111C05A
|
||||
:100B500009851A852B853C85DC01CB01801B910B17
|
||||
:100B6000A20BB30B803D9740A105B10510F481E0C5
|
||||
:100B700073C01D860E941B1469877A878B879C87A8
|
||||
:100B80001C821B821A821982188261E08E810E9467
|
||||
:100B90009D1260E08E810E94D51264E170E080E0D9
|
||||
:100BA00090E00E945714F89461E08E810E94D51263
|
||||
:100BB00088E290E00E947D1460E08E810E949D1288
|
||||
:100BC000F12CD12C81E009C0E39481E090E00E94F7
|
||||
:100BD0007D148FEFE81204C009C0E12C082F10E04B
|
||||
:100BE0008E810E940C138017910771F38E810E94F1
|
||||
:100BF0000C139FEFE916C9F023E02F1590F4F0FCD9
|
||||
:100C000010C09D2D969596959695FE01E90FF11DC4
|
||||
:100C10009081990F908328852E1510F49160908310
|
||||
:100C2000D394F39495E5F912D8CF789427E22D1553
|
||||
:100C300090F42C8130E04881898190E0840F911DEF
|
||||
:100C40004A81840F911D4B81840F911D992728178C
|
||||
:100C5000390709F48CCF80E0DF91CF911F910F917C
|
||||
:100C6000FF90EF90DF900895EF92FF920F931F9304
|
||||
:100C7000CF93DF93EC010E948405882391F18F814B
|
||||
:100C80008B3029F070F18551823058F507C06881AA
|
||||
:100C900070E080E090E00E94E1172DC0688170E074
|
||||
:100CA00080E090E00E94E11720E030E040E853E46B
|
||||
:100CB0000E946F187B018C01698170E080E090E0F8
|
||||
:100CC0000E94E3179B01AC016E2D7F2D802F912F89
|
||||
:100CD0000E94151720E030E040E251E40E947917AD
|
||||
:100CE0000AC06FE171E084EB92E00E94F71460E0CB
|
||||
:100CF00070E080EC9FE7DF91CF911F910F91FF9003
|
||||
:100D0000EF900895CF92DF92EF92FF920F931F938F
|
||||
:100D1000CF93DF938C01C62F0E948405882309F4AA
|
||||
:100D200077C0F80187818B3039F008F471C08551A4
|
||||
:100D3000823008F06DC01DC0F801628170E080E073
|
||||
:100D400090E00E94E117B62FA72FF82FE92F462F2A
|
||||
:100D5000572F682F792FCB01BA01CC2309F462C039
|
||||
:100D600020E030E040E151E46B2F7A2F8F2F9E2F4F
|
||||
:100D700037C0F801D2816D2F6F7770E080E090E08E
|
||||
:100D80000E94E31720E030E040E853E40E946F182F
|
||||
:100D90006B017C01F801638170E080E090E00E94CB
|
||||
:100DA000E3179B01AC016C2D7D2D8E2D9F2D0E9494
|
||||
:100DB000151720E030E040E251E40E947917472FF8
|
||||
:100DC000382F292F862F942FA32FB22FBC01CD01AE
|
||||
:100DD000D7FD9058CC2331F120E030E040E151E4E0
|
||||
:100DE0000E946F1820E030E040EA50E40E9479173A
|
||||
:100DF00020E030E040E052E40E941517472F382FE2
|
||||
:100E0000292F862F942FA32FB22FBC01CD010AC00A
|
||||
:100E10006FE171E084EB92E00E94F71460E070E013
|
||||
:100E200080EC9FE7DF91CF911F910F91FF90EF90A2
|
||||
:100E3000DF90CF900895CF93DF9322C087EE91E0AB
|
||||
:100E40000E94AA0E049741F4109269011092680161
|
||||
:100E500010926B0110926A01C0916A01D0916B01EE
|
||||
:100E600087EE91E00E94B30EFE01EE0FFF1FE459E2
|
||||
:100E7000FE4F918380832196D0936B01C0936A01CA
|
||||
:100E800087EE91E00E94AA0E892BC1F6DF91CF91E7
|
||||
:100E9000089580916C0190916D01019731F46091FA
|
||||
:100EA000670187EE91E00E94350F80916C0190916F
|
||||
:100EB0006D018330910529F08730910511F0C897B5
|
||||
:100EC00041F443E050E06EE571E087EE91E00E946E
|
||||
:100ED000070F80916C0190916D018830910511F0A0
|
||||
:100EE000449741F444E050E06EE571E087EE91E014
|
||||
:100EF0000E94070F80916C0190916D018E319105D8
|
||||
:100F000011F0889741F449E050E06EE571E087EE1A
|
||||
:100F100091E00C94070F089540E855E260E070E01E
|
||||
:100F200084EB92E00E944A1665E070E087EE91E063
|
||||
:100F30000E94920F6BE177E087EE91E00E94C60F6E
|
||||
:100F400069E477E087EE91E00E94CB0F69E271E0FF
|
||||
:100F500084EB92E00C941615AF92BF92CF92DF9281
|
||||
:100F6000EF92FF920F931F93CF93DF93CDB7DEB72E
|
||||
:100F70002C970FB6F894DEBF0FBECDBF80916A01EB
|
||||
:100F800090916B01049709F0D4C68091680190910B
|
||||
:100F90006901892B09F0CDC681E090E09093690149
|
||||
:100FA0008093680180916C0190916D01019731F4FB
|
||||
:100FB00080916E010E940C138093670180916C01F7
|
||||
:100FC00090916D01029731F46091700180916E01F2
|
||||
:100FD0000E94D51280916C0190916D010397A9F444
|
||||
:100FE00080916E010E94F11190935D0180935C01EC
|
||||
:100FF0009C0197FF02C021503F4F30935F0160E09A
|
||||
:1010000071E00E94DD188093600180916C019091E5
|
||||
:101010006D01049741F460917001709171018091AC
|
||||
:101020006E010E94121280916C0190916D010597E2
|
||||
:1010300031F46091700180916E010E949D12809147
|
||||
:101040006C0190916D01079709F042C080916E018B
|
||||
:1010500090916F01809352019093530161E00E943F
|
||||
:101060009D1260E0809152010E94D51282E090E0D2
|
||||
:101070000E947D1461E0809152010E94D51285E0AA
|
||||
:1010800090E00E947D1460E0809152010E94D51290
|
||||
:1010900060E0809152010E949D1220E432E44FE012
|
||||
:1010A00050E061E0809152010E9435132AE330E064
|
||||
:1010B00040E050E00E941319CA01B90120E031E07C
|
||||
:1010C00040E050E00E94131920935F01609360019B
|
||||
:1010D00080916C0190916D018830910539F481E027
|
||||
:1010E00080935F0182E08093600121C0449709F5FD
|
||||
:1010F00080915B01811107C086EE91E00E94AE04F1
|
||||
:1011000081E080935B0129E531E048E551E067E546
|
||||
:1011100071E086EE91E00E94BE04809157018093B9
|
||||
:101120005F01809158018093600180915901809303
|
||||
:10113000610180916C0190916D014E9769F58091EC
|
||||
:101140005A01811107C08EED91E00E948C0181E06F
|
||||
:1011500080935A018EED91E00E9490018091E00110
|
||||
:1011600080935F018091DF01809360018091DE01B7
|
||||
:10117000809361018091E301809362018091E2019B
|
||||
:10118000809363019091E4019093640180936501E1
|
||||
:101190008091E1018093660180916C0190916D01D5
|
||||
:1011A000889709F059C08091700190917101009762
|
||||
:1011B00019F426E04BE005C08130910549F426E0A2
|
||||
:1011C00046E160916E0180ED91E00E946D0508C0DE
|
||||
:1011D0008230910519F426E045E1F3CF0397D9F366
|
||||
:1011E00060E080ED91E00E94820669877A878B87B4
|
||||
:1011F0009C8780ED91E00E9434066D837E838F830F
|
||||
:1012000098871092510110925001FE01399680E0AA
|
||||
:1012100090E001962191DC01A25ABE4F2C938430BC
|
||||
:101220009105BCF384E090E09093510180935001CC
|
||||
:101230000196DC01A25ABE4FE5E0F0E0EC0FFD1F85
|
||||
:10124000E80FF91F359720812C938830910584F39E
|
||||
:10125000909351018093500180916C0190916D01A8
|
||||
:10126000C297D9F480916E0190916F01482F21E0CF
|
||||
:101270006091700170917101672B09F420E0642F77
|
||||
:101280006F5FFC01329737E03E9FC0013F9F900D9A
|
||||
:1012900011248A559E4F0E94160280916C019091F4
|
||||
:1012A0006D01C39791F420916E0130916F0122502E
|
||||
:1012B000310947E0429FC001439F900D11248A5598
|
||||
:1012C0009E4F0E94080381116AC380916C01909126
|
||||
:1012D0006D01C49791F420916E0130916F012250FD
|
||||
:1012E000310917E0129FC001139F900D11248A55F8
|
||||
:1012F0009E4F0E94080381116BC380916C019091F5
|
||||
:101300006D01C59791F420916E0130916F012250CB
|
||||
:10131000310947E0429FC001439F900D11248A5537
|
||||
:101320009E4F0E940803811165C380916C019091CA
|
||||
:101330006D01C69791F420916E0130916F0122509A
|
||||
:10134000310917E0129FC001139F900D11248A5597
|
||||
:101350009E4F0E940803811168C380916C01909197
|
||||
:101360006D01C79791F420916E0130916F01225069
|
||||
:10137000310917E0129FC001139F900D11248A5567
|
||||
:101380009E4F0E940803811162C380916C0190916D
|
||||
:101390006D01C89791F420916E0130916F01225038
|
||||
:1013A000310917E0129FC001139F900D11248A5537
|
||||
:1013B0009E4F0E940803811163C380916C0190913C
|
||||
:1013C0006D018634910591F460916E0170916F0109
|
||||
:1013D000462F4F5F9B0122503109C901880F991F89
|
||||
:1013E000820F931F8C569E4F0E94100380916C01B8
|
||||
:1013F00090916D018734910589F420916E013091AF
|
||||
:101400006F0122503109C901880F991F820F931F64
|
||||
:101410008C569E4F0E947A04811146C380916C01C4
|
||||
:1014200090916D018834910589F420916E0130917D
|
||||
:101430006F0122503109C901880F991F820F931F34
|
||||
:101440008C569E4F0E947A04811140C380916C019A
|
||||
:1014500090916D018934910589F420916E0130914C
|
||||
:101460006F0122503109C901880F991F820F931F04
|
||||
:101470008C569E4F0E947A04811145C380916C0165
|
||||
:1014800090916D018A34910589F420916E0130911B
|
||||
:101490006F0122503109C901880F991F820F931FD4
|
||||
:1014A0008C569E4F0E947A0481114AC380916C0130
|
||||
:1014B00090916D018B34910589F420916E013091EA
|
||||
:1014C0006F0122503109C901880F991F820F931FA4
|
||||
:1014D0008C569E4F0E947A0481115AC380916C01F0
|
||||
:1014E00090916D018C34910589F420916E013091B9
|
||||
:1014F0006F0122503109C901880F991F820F931F74
|
||||
:101500008C569E4F0E947A0481115BC380916C01BE
|
||||
:1015100090916D018D349105A9F520916E01309166
|
||||
:101520006F0122503109C901880F991F820F931F43
|
||||
:101530008C569E4F0E947A048111BBC323C0812F19
|
||||
:101540000E94F111BC0120916E0130916F01225077
|
||||
:101550003109C901880F991F820F931FE12C00E008
|
||||
:1015600024E040E08C569E4F0E94F8036AEF70E042
|
||||
:1015700080E090E00E9457142FEFC21AD20ACA14DA
|
||||
:10158000DB04ECF280916C0190916D018E34910539
|
||||
:1015900089F420916E0130916F0122503109C90107
|
||||
:1015A000880F991F820F931F8C569E4F0E947A04BA
|
||||
:1015B00081118CC380916C0190916D018F349105E4
|
||||
:1015C00089F420916E0130916F0122503109C901D7
|
||||
:1015D000880F991F820F931F8C569E4F0E947A048A
|
||||
:1015E00081118EC380916C0190916D018A359105B6
|
||||
:1015F00069F480916E018093540180917001809311
|
||||
:101600005501809172018093560118C08B35910568
|
||||
:10161000A9F460916E0170916F01462F4F5F9B019D
|
||||
:101620002250310955E0529FC001539F900D112463
|
||||
:10163000209170018A589E4F0E945C0180916C013C
|
||||
:1016400090916D018C35910549F080916C019091DC
|
||||
:101650006D018D35910509F0BDC048C060916E01E6
|
||||
:1016600070916F01462F4F5F9B012250310955E069
|
||||
:10167000529FC001539F900D1124209170018A58F0
|
||||
:101680009E4F0E945C01009172011091730102FB58
|
||||
:10169000DD24D0F8D19401FBCC24C0F8C1940170B2
|
||||
:1016A0001127102F1195E12CF12CA5E0BA2E16C0B0
|
||||
:1016B00060916E0170916F0162507109B69EC00118
|
||||
:1016C000B79E900D1124012F2C2D4D2D6E2D8A5873
|
||||
:1016D0009E4F0E94EF003FEFE31AF30A80917001E2
|
||||
:1016E00090917101E816F9061CF3AFCF20917001BB
|
||||
:1016F0003091710180916E0190916F01232BB1F4B3
|
||||
:101700009C012250310945E0429FC001439F900D4A
|
||||
:10171000112400915601209155014091540160918E
|
||||
:1017200072018A589E4F0E94EF0054C09C012250C3
|
||||
:10173000310945E0429FC001439F900D11248A5812
|
||||
:101740009E4F0E948901E12CF12CC82ED12C15E06E
|
||||
:101750003DC020917001309171012130310541F47B
|
||||
:101760008091720190917301E816F906B1F42BC0D3
|
||||
:101770002230310541F480917201909173018E15F0
|
||||
:101780009F055CF420C023303105E9F4809172019B
|
||||
:1017900090917301E816F906B4F020916E01309132
|
||||
:1017A0006F0122503109129FC001139F900D112427
|
||||
:1017B0000091560120915501409154016E2D8A5897
|
||||
:1017C0009E4F0E94EF008FEFE81AF80AEC14FD0418
|
||||
:1017D0000CF4BFCF80916C0190916D018E35910515
|
||||
:1017E00049F080916C0190916D018F35910509F060
|
||||
:1017F000A0C252C08091720190917301181619060F
|
||||
:1018000034F081E090E09093730180937201209115
|
||||
:101810006E0130916F012250310945E0429FC001B5
|
||||
:10182000439F900D11248A589E4F0E948901E09099
|
||||
:101830007001F0907101C82ED12C15E029C0809163
|
||||
:101840007001909171019701281B390BC9016091BA
|
||||
:101850007201709173010E94DD18892BB1F42091FF
|
||||
:101860006E0130916F0122503109129FC001139F08
|
||||
:10187000900D112400915601209155014091540181
|
||||
:101880006E2D8A589E4F0E94EF003FEFE31AF30A35
|
||||
:10189000EC14FD04A4F2A5CF20916E0130916F01EC
|
||||
:1018A0002250310945E0429FC001439F900D112411
|
||||
:1018B0008A589E4F0E9489012091720130917301D4
|
||||
:1018C000232B59F133C080917001909171012091C7
|
||||
:1018D0006E0130916F0122503109E816F90664F467
|
||||
:1018E000129FC001139F900D112400915601209169
|
||||
:1018F00055014091540108C0129FC001139F900DE3
|
||||
:10190000112400E020E040E06E2D8A589E4F0E9496
|
||||
:10191000EF008FEFE81AF80A05C0E12CF12CC82E71
|
||||
:10192000D12C15E0EC14FD0474F203C2C82ED12CA6
|
||||
:10193000760115E030C0809170019091710196019F
|
||||
:10194000281B390B80916E0190916F01E216F3060E
|
||||
:101950007CF09C0122503109129FC001139F900D11
|
||||
:1019600011240091560120915501409154010BC062
|
||||
:101970009C0122503109129FC001139F900D112428
|
||||
:1019800000E020E040E06E2D8A589E4F0E94EF005C
|
||||
:1019900021E0E21AF108E114F10469F6CAC161E03C
|
||||
:1019A0008091700190917101892B09F460E0209180
|
||||
:1019B0006E0130916F012250310947E0429FC00112
|
||||
:1019C000439F900D11248A559E4F0E94FE027DCCAC
|
||||
:1019D00020916E0130916F0122503109129FC00198
|
||||
:1019E000139F900D1124609170018A559E4F0E94A3
|
||||
:1019F000EC0283CC41E08091720190917301892BBC
|
||||
:101A000009F440E020916E0130916F0122503109BC
|
||||
:101A100057E0529FC001539F900D112460917001B7
|
||||
:101A20008A559E4F0E94CB0280CC20916E0130914E
|
||||
:101A30006F0122503109129FC001139F900D112494
|
||||
:101A4000609170018A559E4F0E94B20286CC90919F
|
||||
:101A5000720180E0609170017091710168277927AF
|
||||
:101A600020916E0130916F0122503109129FC00107
|
||||
:101A7000139F900D11248A559E4F0E94690285CCB8
|
||||
:101A800020916E0130916F0122503109129FC001E7
|
||||
:101A9000139F900D11248A559E4F0E94040380933A
|
||||
:101AA0005F019093600189CC20916E0130916F01AC
|
||||
:101AB00022503109C901880F991F820F931F60912D
|
||||
:101AC00070018C569E4F0E942703A8CC9091720102
|
||||
:101AD00080E06091700170917101682779272091F1
|
||||
:101AE0006E0130916F0122503109C901880F991F91
|
||||
:101AF000820F931FE12C00E024E040E08C569E4FC3
|
||||
:101B00000E94F803A3CC9091720180E06091700173
|
||||
:101B1000709171016827792720916E0130916F01D2
|
||||
:101B200022503109C901880F991F820F931FE12CA0
|
||||
:101B300000E024E041E08C569E4F0E94F8039ECCCA
|
||||
:101B400020916E0130916F0122503109C901880F37
|
||||
:101B5000991F820F931F609172018C569E4F0E94B5
|
||||
:101B60007304898320916E0130916F0122503109F5
|
||||
:101B7000C901880F991F820F931F2091700141E0C6
|
||||
:101B8000BE016F5F7F4F8C569E4F0E94AE038ECC7E
|
||||
:101B900080917201898320916E0130916F012250F2
|
||||
:101BA0003109C901880F991F820F931F209170017D
|
||||
:101BB00041E0BE016F5F7F4F8C569E4F0E94AE0387
|
||||
:101BC0008DCC80917001909171010AE010E0B80114
|
||||
:101BD0000E94DD1820916E0130916F012250310971
|
||||
:101BE000C901880F991F820F931F8C569E4F0E9428
|
||||
:101BF000730489838091700190917101B8010E94F2
|
||||
:101C0000DD1820916E0130916F0122503109A90138
|
||||
:101C1000440F551F420F531F682FCA018C569E4F09
|
||||
:101C20000E94730480688A8380917201909173018D
|
||||
:101C3000B8010E94DD1820916E0130916F01225091
|
||||
:101C40003109C901880F991F820F931F8C569E4F2F
|
||||
:101C50000E9473048B838091720190917301B8018B
|
||||
:101C60000E94DD1820916E0130916F0122503109E0
|
||||
:101C7000A901440F551F420F531F682FCA018C56EC
|
||||
:101C80009E4F0E9473048C8320916E0130916F01EE
|
||||
:101C900022503109C901880F991F820F931F20E03C
|
||||
:101CA00044E0BE016F5F7F4F8C569E4F0E94AE0393
|
||||
:101CB0002DCC10917001A0907201B0907301AA0C0C
|
||||
:101CC000BB1CAA0CBB1CC12CD12C59CC8FEF898317
|
||||
:101CD0008A838B838C8320916E0130916F01225017
|
||||
:101CE0003109C901880F991F820F931F20E044E03A
|
||||
:101CF000BE016F5F7F4F8C569E4F0E94AE035ACC41
|
||||
:101D000019821A821B821C8220916E0130916F0110
|
||||
:101D100022503109C901880F991F820F931F20E0BB
|
||||
:101D200044E0BE016F5F7F4F8C569E4F0E94AE0312
|
||||
:101D300059CC2C960FB6F894DEBF0FBECDBFDF9105
|
||||
:101D4000CF911F910F91FF90EF90DF90CF90BF90B8
|
||||
:101D5000AF90089520911B0230E080911C02281B57
|
||||
:101D60003109C901089580911C0290911B028917C5
|
||||
:101D700050F4E82FF0E0E35EFD4F208130E08F5F0C
|
||||
:101D800080931C0202C02FEF3FEFC9010895E0913C
|
||||
:101D90001C0280911B02E81730F4F0E0E35EFD4F77
|
||||
:101DA000208130E002C02FEF3FEFC9010895089570
|
||||
:101DB000E091F301F091F4013097E1F030911C02D1
|
||||
:101DC00020911B023217B0F040E009C0DC01A20FE5
|
||||
:101DD000B31F5C91D901A35EBD4F5C934F5F242F6D
|
||||
:101DE00030E02617370794F310921C0260931B0211
|
||||
:101DF000CB0109940895E091F501F091F601309737
|
||||
:101E000029F01092F9011092F80109940895CF92E7
|
||||
:101E1000DF92EF92FF920F931F93CF93DF937C019A
|
||||
:101E2000CB018A012091F701222391F0EB016B0194
|
||||
:101E3000C40ED51E09C06991D701ED91FC910190A6
|
||||
:101E4000F081E02DC7010995CC15DD05A1F703C090
|
||||
:101E5000642F0E948E10C801DF91CF911F910F91C6
|
||||
:101E6000FF90EF90DF90CF900895CF93DF931F9274
|
||||
:101E7000CDB7DEB769832091F7012223D1F02091FD
|
||||
:101E8000F801203240F021E030E0FC01338322836E
|
||||
:101E900020E030E015C08091F901E82FF0E0E65035
|
||||
:101EA000FE4F998190838F5F8093F9018093F801B1
|
||||
:101EB00005C061E0CE0101960E948E1021E030E065
|
||||
:101EC000C9010F90DF91CF910895FC011382128216
|
||||
:101ED00048EE53E060E070E0448355836683778387
|
||||
:101EE00084E391E091838083089510921C02109204
|
||||
:101EF0001B021092F9011092F8010C94D40FCF93A9
|
||||
:101F0000DF93EC01862F0E94F20F8BEF9EE00E9480
|
||||
:101F1000AC1088ED9EE00E94A710CE01DF91CF911A
|
||||
:101F20000C94750F0C947F0F862F413208F040E21D
|
||||
:101F30006DE172E00E94F60F10921C0280931B026A
|
||||
:101F4000089521E00C94940F81E08093F701609351
|
||||
:101F50001A021092F9011092F80108950C94A40F3E
|
||||
:101F60000F93062F21E04091F8016AEF71E0809114
|
||||
:101F70001A020E943B101092F9011092F80110927F
|
||||
:101F8000F7010F91089561E00C94B00F7093F40184
|
||||
:101F90006093F30108957093F6016093F50108953D
|
||||
:101FA00087EE91E00C94650F1092460281E08093D9
|
||||
:101FB00044021092430261E082E10E94D51261E086
|
||||
:101FC00083E10E94D512E9EBF0E080818E7F80836F
|
||||
:101FD00080818D7F808382E08093B80085E4809348
|
||||
:101FE000BC000895880F8093BA000895413208F02C
|
||||
:101FF0003FC0909146029111FCCF91E09093460230
|
||||
:10200000209344022FEF20933D0210924202242F8E
|
||||
:102010002150209341029093450290914502880FF0
|
||||
:10202000892B8093450280914302813041F41092C4
|
||||
:102030004302809145028093BB0085EC01C085EE90
|
||||
:102040008093BC00809146028130E1F3809142028E
|
||||
:10205000841710F44091420227E432E0FB01D901D9
|
||||
:1020600002C08D9181938A2F821B8417D0F301C007
|
||||
:1020700040E0842F08950F93413208F046C09091BC
|
||||
:1020800046029111FCCF92E09093460200934402E5
|
||||
:102090009FEF90933D021092420240934102FB0158
|
||||
:1020A00067E472E0DB0102C091919D939A2F961B29
|
||||
:1020B0009417D0F31092450290914502880F892B16
|
||||
:1020C0008093450280914302813041F41092430293
|
||||
:1020D000809145028093BB0085EC01C085EE809322
|
||||
:1020E000BC00222321F0809146028230E1F38091EE
|
||||
:1020F0003D028F3F61F080913D02803251F080912E
|
||||
:102100003D02803341F483E007C081E005C080E0F8
|
||||
:1021100003C082E001C084E00F910895613298F419
|
||||
:1021200020914602243089F460933F02FC0187E647
|
||||
:1021300092E0DC0102C021912D932A2F281B261743
|
||||
:10214000D0F380E0089581E0089582E008959093AF
|
||||
:10215000880280938702089590938A02809389026F
|
||||
:10216000089585ED8093BC008091BC0084FDFCCF78
|
||||
:1021700010924602089585EC8093BC0010924602AE
|
||||
:1021800008951F920F920FB60F9211242F933F9331
|
||||
:102190004F935F936F937F938F939F93AF93BF936F
|
||||
:1021A000EF93FF938091B900887F803609F49FC038
|
||||
:1021B00058F5883209F45BC090F4803109F452C0BC
|
||||
:1021C00038F4882309F4F8C0883009F0F9C04AC00F
|
||||
:1021D000883109F44CC0803209F0F2C05CC0803410
|
||||
:1021E00009F46BC038F4803309F455C0883309F022
|
||||
:1021F000E7C054C0803509F454C0883509F462C082
|
||||
:10220000883409F0DDC0DAC0883909F4CBC0A8F4FD
|
||||
:10221000883709F46CC038F4883609F468C0803710
|
||||
:1022200009F0CEC064C0883809F4BCC0803909F414
|
||||
:1022300064C0803809F0C4C060C0803B09F48AC023
|
||||
:1022400038F4803A09F46BC0883A09F0B9C082C00A
|
||||
:10225000803C09F4ABC0883C09F4A8C0883B09F075
|
||||
:10226000AFC08DC0809145028093BB0012C0909199
|
||||
:10227000420280914102981788F580914202E82F2E
|
||||
:10228000F0E0E95BFD4F90819093BB008F5F8093FE
|
||||
:10229000420285EC88C080933D0290C080933D024D
|
||||
:1022A00056C0809142029091BB00E82FF0E0E95BBC
|
||||
:1022B000FD4F90838F5F8093420290914202809104
|
||||
:1022C00041026DC0809142029091BB00E82FF0E086
|
||||
:1022D000E95BFD4F90838F5F8093420280914402BF
|
||||
:1022E00081116CC081E08093430284EA60C083E086
|
||||
:1022F0008093460210923E02CCCF80913E02803203
|
||||
:1023000008F050C080913E029091BB00E82FF0E0B1
|
||||
:10231000E557FD4F90838F5F80933E02BACF809147
|
||||
:102320003E02803230F4E0913E02F0E0E557FD4F8E
|
||||
:1023300010820E94B11060913E02E0918702F091FC
|
||||
:10234000880270E08BE892E0099510923E020E94AC
|
||||
:10235000BB1036C084E08093460210924002109277
|
||||
:102360003F02E0918902F0918A02099580913F0233
|
||||
:10237000811105C081E080933F0210926702809135
|
||||
:102380004002E82FF0E0E959FD4F90819093BB00A7
|
||||
:102390008F5F809340029091400280913F02981796
|
||||
:1023A00008F477CF85E88093BC000AC085EC809361
|
||||
:1023B000BC001092460204C010923D020E94B1106F
|
||||
:1023C000FF91EF91BF91AF919F918F917F916F910D
|
||||
:1023D0005F914F913F912F910F900FBE0F901F90E3
|
||||
:1023E00018958E3008F08E5087702091060140E4D9
|
||||
:1023F000249F90011124822B80937C0080917A008D
|
||||
:10240000806480937A0080917A0086FDFCCF2091D1
|
||||
:10241000780030917900932F80E0AC01422B9A0133
|
||||
:10242000C90108951F93CF93DF93182FEB0161E04B
|
||||
:102430000E949D12209711F460E004C0CF3FD105A7
|
||||
:1024400039F461E0812FDF91CF911F910C94D51267
|
||||
:10245000E12FF0E0E859FF4FE491E330B9F028F4C0
|
||||
:10246000E13051F0E230B1F50CC0E63019F1E7305F
|
||||
:1024700049F1E43079F514C084B5806884BDC7BDE6
|
||||
:102480002EC084B5806284BDC8BD29C08091800003
|
||||
:10249000806880938000D0938900C09388001FC01B
|
||||
:1024A00080918000806280938000D0938B00C093E5
|
||||
:1024B0008A0015C08091B00080688093B000C093FE
|
||||
:1024C000B3000DC08091B00080628093B000C093D3
|
||||
:1024D000B40005C0C038D1050CF0B3CFADCFDF914B
|
||||
:1024E000CF911F910895833069F028F48130A1F0D5
|
||||
:1024F000823011F514C08630B1F08730C1F08430DD
|
||||
:10250000D9F404C0809180008F7703C0809180004F
|
||||
:102510008F7D80938000089584B58F7702C084B545
|
||||
:102520008F7D84BD08958091B0008F7703C0809126
|
||||
:10253000B0008F7D8093B0000895CF93DF9390E03B
|
||||
:10254000FC01E458FF4F4491FC01E057FF4F849198
|
||||
:10255000882341F190E0880F991FFC01E854FF4F58
|
||||
:1025600025913491D90182559F4FFC018591949119
|
||||
:10257000C82FD92F9FB7F8948C91611106C0409550
|
||||
:1025800084238C938881842308C0623041F4242FF3
|
||||
:10259000209582238C938881842B888302C0842B8E
|
||||
:1025A0008C939FBFDF91CF9108950F931F93CF938B
|
||||
:1025B000DF931F92CDB7DEB7282F30E0F901E8593D
|
||||
:1025C000FF4F8491F901E458FF4F1491F901E0574E
|
||||
:1025D000FF4F04910023D1F0882321F069830E94EA
|
||||
:1025E00073126981E02FF0E0EE0FFF1FE255FF4FFD
|
||||
:1025F00085919491DC019FB7F8948C91611103C08F
|
||||
:102600001095812301C0812B8C939FBF0F90DF9188
|
||||
:10261000CF911F910F910895CF93DF93282F30E032
|
||||
:10262000F901E859FF4F8491F901E458FF4FD49123
|
||||
:10263000F901E057FF4FC491CC2389F081110E942A
|
||||
:102640007312EC2FF0E0EE0FFF1FEC55FF4F85915A
|
||||
:102650009491DC018C918D2321E030E011F420E095
|
||||
:1026600030E0C901DF91CF9108958F929F92AF9290
|
||||
:10267000BF92CF92DF92EF92FF920F931F93CF936F
|
||||
:10268000DF9390E0FC01E458FF4FD491FC01E05748
|
||||
:10269000FF4F7491611102C0C0E001C0CD2FDA017B
|
||||
:1026A000C901880F991FAA1FBB1F54E0B695A795B3
|
||||
:1026B000979587955A95D1F7672F70E0660F771F2A
|
||||
:1026C0006C557F4F812C912C5401FB010591149185
|
||||
:1026D00010C0C12CD12C7601C394C80CD91CEA1CA3
|
||||
:1026E000FB1C88169906AA06BB0609F448C04601D9
|
||||
:1026F0005701F801E081ED23EC1759F310C0C12C0C
|
||||
:10270000D12C7601C394C80CD91CEA1CFB1C88167A
|
||||
:102710009906AA06BB0699F14601570103C0FB01C1
|
||||
:1027200005911491F801E081ED23EC13E8CF8819AD
|
||||
:102730009909AA09BB0920E030E0A901FB016591D4
|
||||
:10274000749109C0281739074A075B07C1F02F5F4A
|
||||
:102750003F4F4F4F5F4FFB01E081ED23EC1791F3AB
|
||||
:10276000A5E1B0E00E94D2188B019C01005F1F4FD1
|
||||
:102770002F4F3F4F369527951795079503C000E0DB
|
||||
:1027800010E09801B801C901DF91CF911F910F911D
|
||||
:10279000FF90EF90DF90CF90BF90AF909F908F9081
|
||||
:1027A00008951F920F920FB60F9211242F933F930B
|
||||
:1027B0008F939F93AF93BF938091AB029091AC02A4
|
||||
:1027C000A091AD02B091AE023091B302232F285EEA
|
||||
:1027D0002D3720F40896A11DB11D05C0232F2556C5
|
||||
:1027E0000996A11DB11D2093B3028093AB02909373
|
||||
:1027F000AC02A093AD02B093AE028091AF02909173
|
||||
:10280000B002A091B102B091B2020196A11DB11D1A
|
||||
:102810008093AF029093B002A093B102B093B20242
|
||||
:10282000BF91AF919F918F913F912F910F900FBECC
|
||||
:102830000F901F9018950F931F938FB7F8940091E6
|
||||
:10284000AB021091AC022091AD023091AE028FBF6D
|
||||
:10285000B801C9011F910F9108950F931F939FB75E
|
||||
:10286000F8940091AF021091B0022091B102309122
|
||||
:10287000B20286B5A89B06C08F3F21F00F5F1F4FA5
|
||||
:102880002F4F3F4F9FBF322F212F102F0027080FB0
|
||||
:10289000111D211D311D45E0000F111F221F331F87
|
||||
:1028A0004A95D1F7B801C9011F910F910895CF92B0
|
||||
:1028B000DF92EF92FF92CF93DF936B017C010E9436
|
||||
:1028C0002D14EB010EC00E942D146C1B7D0B683E75
|
||||
:1028D000734038F081E0C81AD108E108F108C85106
|
||||
:1028E000DC4FC114D104E104F10469F7DF91CF9109
|
||||
:1028F000FF90EF90DF90CF900895019739F0019706
|
||||
:1029000029F0880F991F01970197F1F7089578949E
|
||||
:1029100084B5826084BD84B5816084BD85B58260E4
|
||||
:1029200085BD85B5816085BDEEE6F0E08081816082
|
||||
:102930008083E1E8F0E01082808182608083E0E8BB
|
||||
:10294000F0E0808181608083E1EBF0E08081846051
|
||||
:102950008083E0EBF0E0808181608083EAE7F0E053
|
||||
:1029600080818460808380818260808380818160B7
|
||||
:1029700080838081806880831092C1000895CF9207
|
||||
:10298000DF92EF92FF920F931F93CF93DF936C012F
|
||||
:10299000EB017A01E60EF71E00E010E00BC0699132
|
||||
:1029A000D601ED91FC910190F081E02DC6010995D1
|
||||
:1029B000080F191FCE15DF0591F7C801DF91CF91E0
|
||||
:1029C0001F910F91FF90EF90DF90CF900895DB0162
|
||||
:1029D0000D900020E9F7AD0141505109461B570BFE
|
||||
:1029E000DC01ED91FC910280F381E02D09940C94BF
|
||||
:1029F000E714DC01ED91FC910190F081E02D099448
|
||||
:102A00000F931F93CF93DF93EC016DE00E94F914B5
|
||||
:102A10008C016AE0CE010E94F9149C01200F311F45
|
||||
:102A2000C901DF91CF911F910F9108950F931F93CB
|
||||
:102A3000CF93DF93EC010E94E7148C01CE010E943A
|
||||
:102A400000159801280F391FC901DF91CF911F91FF
|
||||
:102A50000F9108950E9487140E948C07C6E0D6E16A
|
||||
:102A60000E94AC072097E1F30E940616F9CFFC0103
|
||||
:102A700084859585FC01E05CFF4F20813181FC015C
|
||||
:102A8000EE5BFF4F80819181281B390B2F73332719
|
||||
:102A9000C9010895FC0184859585FC01E05CFF4F28
|
||||
:102AA00040815181FC01EE5BFF4F20813181421753
|
||||
:102AB000530741F00190F081E02DE80FF91F2081CC
|
||||
:102AC00030E002C02FEF3FEFC9010895FC0184857B
|
||||
:102AD0009585FC01E05CFF4F40815181FC01EE5B7C
|
||||
:102AE000FF4F208131814217530781F0A081B181CE
|
||||
:102AF000A80FB91F8C91208131812F5F3F4F2F7319
|
||||
:102B0000332731832083282F30E002C02FEF3FEF9F
|
||||
:102B1000C9010895FC0186859785FC01E05CFF4FA3
|
||||
:102B2000DC01AE5BBF4F408151812D913C911197EB
|
||||
:102B300042175307C1F70895CF93DF93FC018685B1
|
||||
:102B40009785DC01A05CBF4F2D913C9111972F5FC1
|
||||
:102B50003F4F2F733327EC01CE5BDF4F4881598104
|
||||
:102B600024173507D9F30D90BC91A02DA80FB91FDC
|
||||
:102B70006C93A685B785A05CBF4F11963C932E93AE
|
||||
:102B8000A689B7892C9181E090E0058C02C0880F5E
|
||||
:102B9000991F0A94E2F7282B2C9381E090E0DF91B3
|
||||
:102BA000CF91089508951F920F920FB60F9211249E
|
||||
:102BB0002F933F934F938F939F93EF93FF93409166
|
||||
:102BC000C600809157039091580301968F739927FF
|
||||
:102BD0002091590330915A038217930759F0E091DD
|
||||
:102BE0005703F0915803E95EFC4F408390935803DC
|
||||
:102BF00080935703FF91EF919F918F914F913F9158
|
||||
:102C00002F910F900FBE0F901F90189584EB92E0BC
|
||||
:102C10000E943715892B11F00C94D21508951F923C
|
||||
:102C20000F920FB60F9211242F933F938F939F9380
|
||||
:102C3000EF93FF93209113033091140380911503B8
|
||||
:102C4000909116032817390731F48091C1008F7DC8
|
||||
:102C50008093C10014C0E0911503F0911603ED526A
|
||||
:102C6000FD4F2081809115039091160301968F737B
|
||||
:102C7000992790931603809315032093C600FF9124
|
||||
:102C8000EF919F918F913F912F910F900FBE0F90D9
|
||||
:102C90001F901895CF92DF92EF92FF92CF93DF9320
|
||||
:102CA000EC016A017B01EC89FD8981E090E00E8CEA
|
||||
:102CB00002C0880F991F0A94E2F7808360E271EAEC
|
||||
:102CC00087E090E0A70196010E94F1182150310998
|
||||
:102CD000410951095695479537952795211580E16A
|
||||
:102CE000380798F0EC89FD89108260E970ED83E087
|
||||
:102CF00090E0A70196010E94F11821503109410985
|
||||
:102D000051095695479537952795E889F989308374
|
||||
:102D1000EA89FB892083EE89FF89408181E090E088
|
||||
:102D20009C010A8C02C0220F331F0A94E2F7422B47
|
||||
:102D30004083EE89FF8940819C010B8C02C0220FE9
|
||||
:102D4000331F0A94E2F7422B4083EE89FF894081CA
|
||||
:102D50009C010C8C02C0220F331F0A94E2F7422B15
|
||||
:102D60004083EE89FF8920810D8C02C0880F991F56
|
||||
:102D70000A94E2F7809582238083DF91CF91FF90C0
|
||||
:102D8000EF90DF90CF9008951092B7021092B602A4
|
||||
:102D900088EE93E0A0E0B0E08093B8029093B9028F
|
||||
:102DA000A093BA02B093BB0284E491E09093B50281
|
||||
:102DB0008093B40287E193E09093C1028093C002B4
|
||||
:102DC00083ED92E09093C3028093C20285EC90E081
|
||||
:102DD0009093C5028093C40284EC90E09093C70264
|
||||
:102DE0008093C60280EC90E09093C9028093C80261
|
||||
:102DF00081EC90E09093CB028093CA0286EC90E045
|
||||
:102E00009093CD028093CC0284E08093CE0283E045
|
||||
:102E10008093CF0287E08093D00285E08093D10237
|
||||
:102E200081E08093D20208955058BB27AA270ED084
|
||||
:102E30001CC10DD130F012D120F031F49F3F11F4BC
|
||||
:102E40001EF402C10EF4E095E7FBF8C0E92F1ED195
|
||||
:102E500080F3BA17620773078407950718F071F4B7
|
||||
:102E60009EF536C10EF4E0950B2EBA2FA02D0B0166
|
||||
:102E7000B90190010C01CA01A0011124FF27591BBF
|
||||
:102E800099F0593F50F4503E68F11A16F040A22FC5
|
||||
:102E9000232F342F4427585FF3CF46953795279536
|
||||
:102EA000A795F0405395C9F77EF41F16BA0B620B35
|
||||
:102EB000730B840BBAF09150A1F0FF0FBB1F661F7C
|
||||
:102EC000771F881FC2F70EC0BA0F621F731F841FBF
|
||||
:102ED00048F4879577956795B795F7959E3F08F0E5
|
||||
:102EE000B3CF9395880F08F09927EE0F97958795A4
|
||||
:102EF00008950CD0BAC0B2D040F0A9D030F021F47F
|
||||
:102F00005F3F19F09BC05111E4C09EC0BFD098F341
|
||||
:102F10009923C9F35523B1F3951B550BBB27AA275A
|
||||
:102F200062177307840738F09F5F5F4F220F331FCC
|
||||
:102F3000441FAA1FA9F333D00E2E3AF0E0E830D098
|
||||
:102F400091505040E695001CCAF729D0FE2F27D09B
|
||||
:102F5000660F771F881FBB1F261737074807AB0769
|
||||
:102F6000B0E809F0BB0B802DBF01FF2793585F4FDE
|
||||
:102F70002AF09E3F510568F061C0ABC05F3FECF3A3
|
||||
:102F8000983EDCF3869577956795B795F7959F5FA3
|
||||
:102F9000C9F7880F911D9695879597F90895E1E0F7
|
||||
:102FA000660F771F881FBB1F621773078407BA0756
|
||||
:102FB00020F0621B730B840BBA0BEE1F88F7E095B1
|
||||
:102FC0000895E89409C097FB3EF49095809570951C
|
||||
:102FD00061957F4F8F4F9F4F9923A9F0F92F96E965
|
||||
:102FE000BB279395F695879577956795B795F111DA
|
||||
:102FF000F8CFFAF4BB0F11F460FF1BC06F5F7F4F77
|
||||
:103000008F4F9F4F16C0882311F096E911C0772388
|
||||
:1030100021F09EE8872F762F05C0662371F096E891
|
||||
:10302000862F70E060E02AF09A95660F771F881F60
|
||||
:10303000DAF7880F9695879597F9089597F99F671E
|
||||
:1030400080E870E060E008959FEF80EC0895002430
|
||||
:103050000A941616170618060906089500240A94FD
|
||||
:1030600012161306140605060895092E0394000C83
|
||||
:1030700011F4882352F0BB0F40F4BF2B11F460FF12
|
||||
:1030800004C06F5F7F4F8F4F9F4F089557FD90583B
|
||||
:10309000440F551F59F05F3F71F04795880F97FB1C
|
||||
:1030A000991F61F09F3F79F08795089512161306D6
|
||||
:1030B0001406551FF2CF4695F1DF08C01616170605
|
||||
:1030C0001806991FF1CF869571056105089408953A
|
||||
:1030D000E894BB2766277727CB0197F908950BD093
|
||||
:1030E000C4CFB5DF28F0BADF18F0952309F0A6CFDA
|
||||
:1030F000ABCF1124EECFCADFA0F3959FD1F3950F8C
|
||||
:1031000050E0551F629FF001729FBB27F00DB11D6B
|
||||
:10311000639FAA27F00DB11DAA1F649F6627B00DFB
|
||||
:10312000A11D661F829F2227B00DA11D621F739FE4
|
||||
:10313000B00DA11D621F839FA00D611D221F749FF2
|
||||
:103140003327A00D611D231F849F600D211D822F39
|
||||
:10315000762F6A2F11249F5750408AF0E1F0882380
|
||||
:103160004AF0EE0FFF1FBB1F661F771F881F91508D
|
||||
:103170005040A9F79E3F510570F060CFAACF5F3F46
|
||||
:10318000ECF3983EDCF3869577956795B795F795C0
|
||||
:10319000E7959F5FC1F7FE2B880F911D9695879548
|
||||
:1031A00097F908950E942F19A59F900DB49F900D37
|
||||
:1031B000A49F800D911D1124089597FB072E16F4EE
|
||||
:1031C000009407D077FD09D00E943B1907FC05D079
|
||||
:1031D0003EF4909581959F4F0895709561957F4F2E
|
||||
:1031E0000895A1E21A2EAA1BBB1BFD010DC0AA1F48
|
||||
:1031F000BB1FEE1FFF1FA217B307E407F50720F060
|
||||
:10320000A21BB30BE40BF50B661F771F881F991FDA
|
||||
:103210001A9469F760957095809590959B01AC0123
|
||||
:10322000BD01CF010895052E97FB16F4009407D039
|
||||
:1032300057FD0DD00E94F11807FC09D07EF490953F
|
||||
:103240008095709561957F4F8F4F9F4F0895509552
|
||||
:103250004095309521953F4F4F4F5F4F0895A29F66
|
||||
:10326000B001B39FC001A39F01D0B29F700D811D1B
|
||||
:103270001124911D0895AA1BBB1B51E107C0AA1F71
|
||||
:10328000BB1FA617B70710F0A61BB70B881F991F07
|
||||
:103290005A95A9F780959095BC01CD010895EE0F40
|
||||
:1032A000FF1F0590F491E02D09940F931F93CF9386
|
||||
:1032B000DF93689F8001699F100D789F100D112486
|
||||
:1032C000C8010E947319C82FD92F209731F0A80187
|
||||
:1032D00060E070E08C2F0E94AA1ACE01DF91CF919E
|
||||
:1032E0001F910F9108950F931F93CF93DF93823017
|
||||
:1032F000910510F482E090E0E0915D03F0915E03AF
|
||||
:1033000020E030E0C0E0D0E023C040815181481788
|
||||
:103310005907A8F04817590761F4828193812097D3
|
||||
:1033200019F09B838A832EC090935E0380935D0384
|
||||
:1033300029C02115310529F04217530710F0A901C2
|
||||
:1033400002C0BE01DF0102811381EF019A01F80181
|
||||
:103350003097D9F62115310509F1281B390B243096
|
||||
:10336000310590F412968D919C911397611571051A
|
||||
:1033700021F0FB019383828304C090935E038093CA
|
||||
:103380005D03FD01329644C0FD01E20FF31F8193FE
|
||||
:103390009193225031092D933C933AC020915B03C5
|
||||
:1033A00030915C03232B41F4209102013091030101
|
||||
:1033B00030935C0320935B03209100013091010165
|
||||
:1033C0002115310541F42DB73EB7409104015091CC
|
||||
:1033D0000501241B350BE0915B03F0915C03E217C0
|
||||
:1033E000F307A0F42E1B3F0B2817390778F0AC0128
|
||||
:1033F0004E5F5F4F2417350748F04E0F5F1F509305
|
||||
:103400005C0340935B038193919302C0E0E0F0E0A2
|
||||
:10341000CF01DF91CF911F910F910895EF92FF920D
|
||||
:103420000F931F93CF93DF93009709F48EC0DC01B5
|
||||
:10343000129713961C921E921297E0905D03F090E3
|
||||
:103440005E03E114F10489F42D913C911197280F4A
|
||||
:10345000391F80915B0390915C038217930789F574
|
||||
:10346000B0935C03A0935B0370C0E70120E030E001
|
||||
:1034700001C0EA01CA17DB0738F44A815B819E016B
|
||||
:1034800041155105B1F722C0AC0142505109FA0172
|
||||
:10349000D383C28300811181BC01600F711F6C173F
|
||||
:1034A0007D0761F468817981600F711F6E5F7F4FC6
|
||||
:1034B000718360836A817B81738362832115310507
|
||||
:1034C00029F4B0935E03A0935D033FC0F901B38379
|
||||
:1034D000A283E90149915991C40FD51FAC17BD07CB
|
||||
:1034E00071F4DC019E918E91840F951F0296918359
|
||||
:1034F000808312968D919C91139793838283A0E091
|
||||
:10350000B0E002C0D7017C01F7018281938100976E
|
||||
:10351000C9F7C701029620813181820F931F209144
|
||||
:103520005B0330915C032817390779F4109729F46D
|
||||
:1035300010925E0310925D0304C013961C921E92BB
|
||||
:103540001297F0925C03E0925B03CDB7DEB7E6E042
|
||||
:103550000C94BD1ADC0101C06D9341505040E0F75E
|
||||
:1035600008952A88398848885F846E847D848C8495
|
||||
:103570009B84AA84B984C884DF80EE80FD800C819E
|
||||
:103580001B81AA81B981CE0FD11D0FB6F894DEBF81
|
||||
:0C3590000FBECDBFED010895F894FFCFF1
|
||||
:10359C0000005F0320000101000A006400E8033F03
|
||||
:1035AC00065B4F666D7D077F6F777C395E79715254
|
||||
:1035BC00656164206661696C005265616479210003
|
||||
:1035CC0000000000350F070FAA0EB30EC70ED70E62
|
||||
:1035DC00000000009C15BF14371566154A158A1596
|
||||
:00000001FF
|
||||
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr6.cpp.hex
Normal file
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr6.cpp.hex
Normal file
|
|
@ -0,0 +1,864 @@
|
|||
:100000000C9463000C948B000C948B000C948B006C
|
||||
:100010000C948B000C948B000C948B000C948B0034
|
||||
:100020000C948B000C948B000C948B000C948B0024
|
||||
:100030000C948B000C948B000C948B000C948B0014
|
||||
:100040000C94D1130C948B000C94D3150C940F16B4
|
||||
:100050000C948B000C948B000C948B000C948B00F4
|
||||
:100060000C94C1100C948B000000000700020100EA
|
||||
:100070000003040600000000000000000102040864
|
||||
:100080001020408001020408102001020408102002
|
||||
:10009000040404040404040402020202020203032E
|
||||
:1000A00003030303000000002300260029000000D2
|
||||
:1000B0000000250028002B0000000000240027007D
|
||||
:1000C0002A00D00FC41611241FBECFEFD8E0DEBF28
|
||||
:1000D000CDBF11E0A0E0B1E0ECE9F5E302C005908E
|
||||
:1000E0000D92A035B107D9F713E0A0E5B1E001C04A
|
||||
:1000F0001D92AF35B107E1F710E0C6ECD0E004C0C7
|
||||
:100100002297FE010E945119C23CD107C9F70E94F3
|
||||
:100110002A150C94CC1A0C940000CF93DF93EC01B9
|
||||
:1001200060E088810E94D51284E190E00E947D14F5
|
||||
:1001300061E088810E94D51284E190E0DF91CF9147
|
||||
:100140000C947D140F931F93CF93DF93EC01062F34
|
||||
:1001500018E007FF02C061E001C060E089810E94F1
|
||||
:10016000D512CE010E948D00000F115091F7DF9142
|
||||
:10017000CF911F910F910895EF92FF921F93CF930C
|
||||
:10018000DF9300D0CDB7DEB77C01162F27FF02C06A
|
||||
:1001900060EC01C060EE26FF606147FF686046FFCB
|
||||
:1001A000646017FF626016FF6160C70129834A839C
|
||||
:1001B0000E94A2002981622FC7010E94A2004A81E9
|
||||
:1001C000642FC7010E94A200612FC7010F900F90FA
|
||||
:1001D000DF91CF911F91FF90EF900C94A2007F923E
|
||||
:1001E0008F929F92AF92BF92CF92DF92EF92FF9247
|
||||
:1001F0000F931F93CF93DF93EC01162F942E822E33
|
||||
:1002000060E00E94A20060E0CE010E94A20060E0D7
|
||||
:10021000CE010E94A20060E0CE010E94A20083E015
|
||||
:10022000189F7001112467018FEFC81AD80A57016F
|
||||
:1002300082E0A80EB11C712C1FC071120FC0EB819F
|
||||
:10024000FC81EE0DFF1D9082EB81FC81EC0DFD1D0C
|
||||
:100250008082EB81FC81EA0DFB1D0083EB81FC8138
|
||||
:1002600083E0789EE00DF11D11242281418160819F
|
||||
:10027000CE010E94BC0073948A817816F0F260E08F
|
||||
:10028000CE010E94A20060E0CE010E94A20060E0C8
|
||||
:10029000CE010E94A20060E0CE01DF91CF911F91BC
|
||||
:1002A0000F91FF90EF90DF90CF90BF90AF909F9015
|
||||
:1002B0008F907F900C94A2000F931F93CF93DF93A6
|
||||
:1002C000EC01862F688349832A8361E00E949D1296
|
||||
:1002D00061E089810E949D128A8161E070E023E0E3
|
||||
:1002E000829FC00111240E9455198B839C8310E0CA
|
||||
:1002F00008C000E020E040E0612FCE010E94EF0046
|
||||
:100300001F5F8A811817A8F3DF91CF911F910F917A
|
||||
:100310000895FC018281089587EE91E00C94750F99
|
||||
:10032000CF93DF93EC0168E670E087EE91E00E94E6
|
||||
:10033000AE0F60E087EE91E00E94350F87EE91E00E
|
||||
:100340000E94C30F47E050E068E670E087EE91E05E
|
||||
:100350000E94A10F87EE91E00E94B30E382F3695D0
|
||||
:10036000369536953E70232F220F220F230F8F7064
|
||||
:100370009927280F288387EE91E00E94B30E282F3B
|
||||
:1003800022952F708F7099273AE0239F800D1124BA
|
||||
:10039000898387EE91E00E94B30E382F369536950B
|
||||
:1003A00036953670232F220F220F230F8F70992737
|
||||
:1003B000280F2A8387EE91E00E94B30E282F229502
|
||||
:1003C0002F708F7099273AE0239F800D11248B8323
|
||||
:1003D00087EE91E00E94B30E282F22952F708F7028
|
||||
:1003E00099273AE0239F800D11248C8387EE91E0BA
|
||||
:1003F0000E94B30E282F22952F708F7099273AE014
|
||||
:10040000239F800D11248D8387EE91E00E94B30E0F
|
||||
:10041000282F22952F708F7099273AE0239F800D07
|
||||
:1004200011248E831F82DF91CF910895CF93DF93A4
|
||||
:10043000EC01862F688319824A831B822C831E82DB
|
||||
:100440001D8261E00E949D1261E08A81DF91CF915F
|
||||
:100450000C949D121F93CF93DF93EC0160E08A818F
|
||||
:100460000E94D5128AE090E00E947D1414E061E0C1
|
||||
:100470008A810E94D51260E08A810E94D5121150B3
|
||||
:10048000B1F7DF91CF911F910895FF920F931F93C2
|
||||
:10049000CF93DF93EC018B0190E1F92E612F661F62
|
||||
:1004A0006627661F8A810E94D51288810E940C13DC
|
||||
:1004B00061E0892B09F060E088810E94D512000F6D
|
||||
:1004C000111FFA9459F7DF91CF911F910F91FF906F
|
||||
:1004D0000895EF92FF920F931F93CF93DF93EC0158
|
||||
:1004E0007B01CB0193709E838D8360E070E0CE0131
|
||||
:1004F0000E94450200E010E08C81882351F0C70182
|
||||
:10050000002E02C0880F991F0A94E2F791FF0DC0D8
|
||||
:1005100009C0C701002E02C0969587950A94E2F79C
|
||||
:1005200080FF03C06FEF70E002C060E070E0CE01BA
|
||||
:100530000E9445020F5F1F4F0A301105E9F660E087
|
||||
:1005400070E0CE010E94450260E070E0CE010E94A2
|
||||
:100550004502CE01DF91CF911F910F91FF90EF9057
|
||||
:100560000C942A02662321F06B3018F06AE001C077
|
||||
:1005700061E0262F215061E070E002C0660F771F16
|
||||
:100580002A95E2F7FC01258136816227732776835D
|
||||
:1005900065830C946902662321F06B3018F06AE0E1
|
||||
:1005A00001C061E0562F5150FC012581368161E088
|
||||
:1005B00070E002C0660F771F5A95E2F7442319F0E6
|
||||
:1005C000622B732B04C06095709562237323FC012A
|
||||
:1005D000768365830C9469026B3008F06AE02FEF34
|
||||
:1005E0003FEF02C0220F331F6A95E2F72095309546
|
||||
:1005F000FC0136832583B9010C946902FC016483F4
|
||||
:10060000658176810C946902FC018581968108954B
|
||||
:10061000FC0181E020813181232B09F480E00895E1
|
||||
:10062000CF93DF93EC01862F6883498360E00E94BB
|
||||
:100630009D1260E089810E949D1260E088810E9485
|
||||
:10064000D51260E08981DF91CF910C94D51268308A
|
||||
:1006500010F4685F01C06FE0FC016283089561E0FF
|
||||
:10066000FC0181810E949D1282E390E00C947D1434
|
||||
:10067000CF93DF93EC0161E089810E949D1282E3B8
|
||||
:1006800090E00E947D1460E088810E949D1282E3C8
|
||||
:1006900090E00E947D1460E089810E949D1282E3B7
|
||||
:1006A00090E0DF91CF910C947D140F931F93CF9323
|
||||
:1006B000DF93EC01062F18E061E088810E949D1213
|
||||
:1006C00082E390E00E947D1400FF02C060E001C060
|
||||
:1006D00061E089810E949D1282E390E00E947D1476
|
||||
:1006E00060E088810E949D1282E390E00E947D1468
|
||||
:1006F0000695115009F761E088810E949D1260E023
|
||||
:1007000089810E949D1282E390E00E947D1460E046
|
||||
:1007100088810E949D1282E390E00E947D1489816D
|
||||
:100720000E940C13182F811104C061E089810E947E
|
||||
:100730009D1282E390E00E947D1461E088810E9416
|
||||
:100740009D1282E390E00E947D1481E0111101C0AE
|
||||
:1007500080E0DF91CF911F910F910895CF92DF92AA
|
||||
:10076000EF92FF920F931F93CF93DF9300D0CDB7FB
|
||||
:10077000DEB76C01F62EE42E29837A830E942F03C4
|
||||
:1007800060E4C6010E945503C6010E943803C601F9
|
||||
:100790000E942F032981622F63706054C6010E945A
|
||||
:1007A00055030F2D7A81172F06C0F80161918F0133
|
||||
:1007B000C6010E945503802F8F198E15B0F3C60114
|
||||
:1007C0000E943803C6010E942F03F601628160581F
|
||||
:1007D000C6010E945503C6010F900F90DF91CF9183
|
||||
:1007E0001F910F91FF90EF90DF90CF900C94380302
|
||||
:1007F0004F925F926F927F928F929F92AF92BF9231
|
||||
:10080000CF92DF92EF920F931F93CF93DF9300D09D
|
||||
:1008100000D0CDB7DEB73C016B01322F202F8FE027
|
||||
:10082000A82E81E0B82E88248394912C8C0E9D1ED6
|
||||
:10083000F40101E01FE3D5015E904E905D01C60119
|
||||
:10084000B2010E94DD186115710561F4411106C005
|
||||
:10085000002321F08E2F8819833011F4108313C0E8
|
||||
:10086000108211C0DB01AF70BB27A15FBE4F8C911E
|
||||
:100870008083649DC001659D900D749D900D112431
|
||||
:10088000C81AD90A00E0EE2039F08E2F881981307D
|
||||
:1008900019F48081806880833196B7E0AB16B1E0AF
|
||||
:1008A000BB0649F684E090E0831B9109BE016F5FAF
|
||||
:1008B0007F4F680F791F432FC3010E94AE030F9033
|
||||
:1008C0000F900F900F90DF91CF911F910F91EF90AC
|
||||
:1008D000DF90CF90BF90AF909F908F907F906F9060
|
||||
:1008E0005F904F9008956F70E62FF0E0E15FFE4F4C
|
||||
:1008F00080810895FC0181E09081911101C080E028
|
||||
:1009000008951F93CF93DF931F92CDB7DEB7162FB5
|
||||
:1009100087EE91E049830E94750F6CE470E087EEEA
|
||||
:1009200091E00E94AE0F612F87EE91E00E94350F9B
|
||||
:100930004981642F87EE91E00E94350F87EE91E0A8
|
||||
:100940000F90DF91CF911F910C94C30F462F67E05A
|
||||
:100950000C948104462F68E00C948104CF93DF93BC
|
||||
:10096000EC0160E00E94A60460E0CE010E94AA04AF
|
||||
:1009700061E0CE01DF91CF910C94A6044F925F927B
|
||||
:100980006F927F928F929F92AF92BF92CF92DF929F
|
||||
:10099000EF92FF920F931F93CF93DF9300D01F929C
|
||||
:1009A000CDB7DEB75B016A01790180E48B838A836E
|
||||
:1009B00089830E941B142B013C010DC00E941B1453
|
||||
:1009C0006419750986099709653F7140810591058C
|
||||
:1009D00014F080E06EC087EE91E00E94AA0E181617
|
||||
:1009E000190664F387EE91E00E94B30E43E050E0F5
|
||||
:1009F0006CE470E087EE91E00E94A10F0E941B144E
|
||||
:100A00002B013C018E010F5F1F4F48012DC0C80113
|
||||
:100A1000881999090397D4F40E941B142B013C01F7
|
||||
:100A200011C087EE91E00E94B30EF80180830E940E
|
||||
:100A30001B146419750986099709633371058105CB
|
||||
:100A400091053CF6F8018081803458F70E941B1410
|
||||
:100A50000F5F1F4F6419750986099709653F71403B
|
||||
:100A6000810591050CF0B5CF87EE91E00E94AA0EAA
|
||||
:100A7000892B69F69981892F880F880F95FD8D5FE5
|
||||
:100A800085958595F50180839A81892F880F880F38
|
||||
:100A900095FD8D5F85958595F60180839B81892FD6
|
||||
:100AA000880F880F95FD8D5F85958595F70180836B
|
||||
:100AB00081E00F900F900F90DF91CF911F910F91D8
|
||||
:100AC000FF90EF90DF90CF90BF90AF909F908F906E
|
||||
:100AD0007F906F905F904F900895CF93DF93EC01DC
|
||||
:100AE000862F6E834F83288791E09D8760E00E9468
|
||||
:100AF0009D1261E08E810E94D51219861A861B868E
|
||||
:100B00001C86DF91CF910895DF92EF92FF920F93B1
|
||||
:100B10001F93CF93DF93EC0161E08E810E94D51289
|
||||
:100B20006AEF70E080E090E00E9457140E941B146E
|
||||
:100B300009851A852B853C85601771078207930705
|
||||
:100B400020F419861A861B861C862D85211111C05A
|
||||
:100B500009851A852B853C85DC01CB01801B910B17
|
||||
:100B6000A20BB30B803D9740A105B10510F481E0C5
|
||||
:100B700073C01D860E941B1469877A878B879C87A8
|
||||
:100B80001C821B821A821982188261E08E810E9467
|
||||
:100B90009D1260E08E810E94D51264E170E080E0D9
|
||||
:100BA00090E00E945714F89461E08E810E94D51263
|
||||
:100BB00088E290E00E947D1460E08E810E949D1288
|
||||
:100BC000F12CD12C81E009C0E39481E090E00E94F7
|
||||
:100BD0007D148FEFE81204C009C0E12C082F10E04B
|
||||
:100BE0008E810E940C138017910771F38E810E94F1
|
||||
:100BF0000C139FEFE916C9F023E02F1590F4F0FCD9
|
||||
:100C000010C09D2D969596959695FE01E90FF11DC4
|
||||
:100C10009081990F908328852E1510F49160908310
|
||||
:100C2000D394F39495E5F912D8CF789427E22D1553
|
||||
:100C300090F42C8130E04881898190E0840F911DEF
|
||||
:100C40004A81840F911D4B81840F911D992728178C
|
||||
:100C5000390709F48CCF80E0DF91CF911F910F917C
|
||||
:100C6000FF90EF90DF900895EF92FF920F931F9304
|
||||
:100C7000CF93DF93EC010E948405882391F18F814B
|
||||
:100C80008B3029F070F18551823058F507C06881AA
|
||||
:100C900070E080E090E00E94E1172DC0688170E074
|
||||
:100CA00080E090E00E94E11720E030E040E853E46B
|
||||
:100CB0000E946F187B018C01698170E080E090E0F8
|
||||
:100CC0000E94E3179B01AC016E2D7F2D802F912F89
|
||||
:100CD0000E94151720E030E040E251E40E947917AD
|
||||
:100CE0000AC06FE171E084EB92E00E94F71460E0CB
|
||||
:100CF00070E080EC9FE7DF91CF911F910F91FF9003
|
||||
:100D0000EF900895CF92DF92EF92FF920F931F938F
|
||||
:100D1000CF93DF938C01C62F0E948405882309F4AA
|
||||
:100D200077C0F80187818B3039F008F471C08551A4
|
||||
:100D3000823008F06DC01DC0F801628170E080E073
|
||||
:100D400090E00E94E117B62FA72FF82FE92F462F2A
|
||||
:100D5000572F682F792FCB01BA01CC2309F462C039
|
||||
:100D600020E030E040E151E46B2F7A2F8F2F9E2F4F
|
||||
:100D700037C0F801D2816D2F6F7770E080E090E08E
|
||||
:100D80000E94E31720E030E040E853E40E946F182F
|
||||
:100D90006B017C01F801638170E080E090E00E94CB
|
||||
:100DA000E3179B01AC016C2D7D2D8E2D9F2D0E9494
|
||||
:100DB000151720E030E040E251E40E947917472FF8
|
||||
:100DC000382F292F862F942FA32FB22FBC01CD01AE
|
||||
:100DD000D7FD9058CC2331F120E030E040E151E4E0
|
||||
:100DE0000E946F1820E030E040EA50E40E9479173A
|
||||
:100DF00020E030E040E052E40E941517472F382FE2
|
||||
:100E0000292F862F942FA32FB22FBC01CD010AC00A
|
||||
:100E10006FE171E084EB92E00E94F71460E070E013
|
||||
:100E200080EC9FE7DF91CF911F910F91FF90EF90A2
|
||||
:100E3000DF90CF900895CF93DF9322C087EE91E0AB
|
||||
:100E40000E94AA0E049741F4109269011092680161
|
||||
:100E500010926B0110926A01C0916A01D0916B01EE
|
||||
:100E600087EE91E00E94B30EFE01EE0FFF1FE459E2
|
||||
:100E7000FE4F918380832196D0936B01C0936A01CA
|
||||
:100E800087EE91E00E94AA0E892BC1F6DF91CF91E7
|
||||
:100E9000089580916C0190916D01019731F46091FA
|
||||
:100EA000670187EE91E00E94350F80916C0190916F
|
||||
:100EB0006D018330910529F08730910511F0C897B5
|
||||
:100EC00041F443E050E06EE571E087EE91E00E946E
|
||||
:100ED000070F80916C0190916D018830910511F0A0
|
||||
:100EE000449741F444E050E06EE571E087EE91E014
|
||||
:100EF0000E94070F80916C0190916D018E319105D8
|
||||
:100F000011F0889741F449E050E06EE571E087EE1A
|
||||
:100F100091E00C94070F089540E855E260E070E01E
|
||||
:100F200084EB92E00E944A1666E070E087EE91E062
|
||||
:100F30000E94920F6BE177E087EE91E00E94C60F6E
|
||||
:100F400069E477E087EE91E00E94CB0F69E271E0FF
|
||||
:100F500084EB92E00C941615AF92BF92CF92DF9281
|
||||
:100F6000EF92FF920F931F93CF93DF93CDB7DEB72E
|
||||
:100F70002C970FB6F894DEBF0FBECDBF80916A01EB
|
||||
:100F800090916B01049709F0D4C68091680190910B
|
||||
:100F90006901892B09F0CDC681E090E09093690149
|
||||
:100FA0008093680180916C0190916D01019731F4FB
|
||||
:100FB00080916E010E940C138093670180916C01F7
|
||||
:100FC00090916D01029731F46091700180916E01F2
|
||||
:100FD0000E94D51280916C0190916D010397A9F444
|
||||
:100FE00080916E010E94F11190935D0180935C01EC
|
||||
:100FF0009C0197FF02C021503F4F30935F0160E09A
|
||||
:1010000071E00E94DD188093600180916C019091E5
|
||||
:101010006D01049741F460917001709171018091AC
|
||||
:101020006E010E94121280916C0190916D010597E2
|
||||
:1010300031F46091700180916E010E949D12809147
|
||||
:101040006C0190916D01079709F042C080916E018B
|
||||
:1010500090916F01809352019093530161E00E943F
|
||||
:101060009D1260E0809152010E94D51282E090E0D2
|
||||
:101070000E947D1461E0809152010E94D51285E0AA
|
||||
:1010800090E00E947D1460E0809152010E94D51290
|
||||
:1010900060E0809152010E949D1220E432E44FE012
|
||||
:1010A00050E061E0809152010E9435132AE330E064
|
||||
:1010B00040E050E00E941319CA01B90120E031E07C
|
||||
:1010C00040E050E00E94131920935F01609360019B
|
||||
:1010D00080916C0190916D018830910539F481E027
|
||||
:1010E00080935F0182E08093600121C0449709F5FD
|
||||
:1010F00080915B01811107C086EE91E00E94AE04F1
|
||||
:1011000081E080935B0129E531E048E551E067E546
|
||||
:1011100071E086EE91E00E94BE04809157018093B9
|
||||
:101120005F01809158018093600180915901809303
|
||||
:10113000610180916C0190916D014E9769F58091EC
|
||||
:101140005A01811107C08EED91E00E948C0181E06F
|
||||
:1011500080935A018EED91E00E9490018091E00110
|
||||
:1011600080935F018091DF01809360018091DE01B7
|
||||
:10117000809361018091E301809362018091E2019B
|
||||
:10118000809363019091E4019093640180936501E1
|
||||
:101190008091E1018093660180916C0190916D01D5
|
||||
:1011A000889709F059C08091700190917101009762
|
||||
:1011B00019F426E04BE005C08130910549F426E0A2
|
||||
:1011C00046E160916E0180ED91E00E946D0508C0DE
|
||||
:1011D0008230910519F426E045E1F3CF0397D9F366
|
||||
:1011E00060E080ED91E00E94820669877A878B87B4
|
||||
:1011F0009C8780ED91E00E9434066D837E838F830F
|
||||
:1012000098871092510110925001FE01399680E0AA
|
||||
:1012100090E001962191DC01A25ABE4F2C938430BC
|
||||
:101220009105BCF384E090E09093510180935001CC
|
||||
:101230000196DC01A25ABE4FE5E0F0E0EC0FFD1F85
|
||||
:10124000E80FF91F359720812C938830910584F39E
|
||||
:10125000909351018093500180916C0190916D01A8
|
||||
:10126000C297D9F480916E0190916F01482F21E0CF
|
||||
:101270006091700170917101672B09F420E0642F77
|
||||
:101280006F5FFC01329737E03E9FC0013F9F900D9A
|
||||
:1012900011248A559E4F0E94160280916C019091F4
|
||||
:1012A0006D01C39791F420916E0130916F0122502E
|
||||
:1012B000310947E0429FC001439F900D11248A5598
|
||||
:1012C0009E4F0E94080381116AC380916C01909126
|
||||
:1012D0006D01C49791F420916E0130916F012250FD
|
||||
:1012E000310917E0129FC001139F900D11248A55F8
|
||||
:1012F0009E4F0E94080381116BC380916C019091F5
|
||||
:101300006D01C59791F420916E0130916F012250CB
|
||||
:10131000310947E0429FC001439F900D11248A5537
|
||||
:101320009E4F0E940803811165C380916C019091CA
|
||||
:101330006D01C69791F420916E0130916F0122509A
|
||||
:10134000310917E0129FC001139F900D11248A5597
|
||||
:101350009E4F0E940803811168C380916C01909197
|
||||
:101360006D01C79791F420916E0130916F01225069
|
||||
:10137000310917E0129FC001139F900D11248A5567
|
||||
:101380009E4F0E940803811162C380916C0190916D
|
||||
:101390006D01C89791F420916E0130916F01225038
|
||||
:1013A000310917E0129FC001139F900D11248A5537
|
||||
:1013B0009E4F0E940803811163C380916C0190913C
|
||||
:1013C0006D018634910591F460916E0170916F0109
|
||||
:1013D000462F4F5F9B0122503109C901880F991F89
|
||||
:1013E000820F931F8C569E4F0E94100380916C01B8
|
||||
:1013F00090916D018734910589F420916E013091AF
|
||||
:101400006F0122503109C901880F991F820F931F64
|
||||
:101410008C569E4F0E947A04811146C380916C01C4
|
||||
:1014200090916D018834910589F420916E0130917D
|
||||
:101430006F0122503109C901880F991F820F931F34
|
||||
:101440008C569E4F0E947A04811140C380916C019A
|
||||
:1014500090916D018934910589F420916E0130914C
|
||||
:101460006F0122503109C901880F991F820F931F04
|
||||
:101470008C569E4F0E947A04811145C380916C0165
|
||||
:1014800090916D018A34910589F420916E0130911B
|
||||
:101490006F0122503109C901880F991F820F931FD4
|
||||
:1014A0008C569E4F0E947A0481114AC380916C0130
|
||||
:1014B00090916D018B34910589F420916E013091EA
|
||||
:1014C0006F0122503109C901880F991F820F931FA4
|
||||
:1014D0008C569E4F0E947A0481115AC380916C01F0
|
||||
:1014E00090916D018C34910589F420916E013091B9
|
||||
:1014F0006F0122503109C901880F991F820F931F74
|
||||
:101500008C569E4F0E947A0481115BC380916C01BE
|
||||
:1015100090916D018D349105A9F520916E01309166
|
||||
:101520006F0122503109C901880F991F820F931F43
|
||||
:101530008C569E4F0E947A048111BBC323C0812F19
|
||||
:101540000E94F111BC0120916E0130916F01225077
|
||||
:101550003109C901880F991F820F931FE12C00E008
|
||||
:1015600024E040E08C569E4F0E94F8036AEF70E042
|
||||
:1015700080E090E00E9457142FEFC21AD20ACA14DA
|
||||
:10158000DB04ECF280916C0190916D018E34910539
|
||||
:1015900089F420916E0130916F0122503109C90107
|
||||
:1015A000880F991F820F931F8C569E4F0E947A04BA
|
||||
:1015B00081118CC380916C0190916D018F349105E4
|
||||
:1015C00089F420916E0130916F0122503109C901D7
|
||||
:1015D000880F991F820F931F8C569E4F0E947A048A
|
||||
:1015E00081118EC380916C0190916D018A359105B6
|
||||
:1015F00069F480916E018093540180917001809311
|
||||
:101600005501809172018093560118C08B35910568
|
||||
:10161000A9F460916E0170916F01462F4F5F9B019D
|
||||
:101620002250310955E0529FC001539F900D112463
|
||||
:10163000209170018A589E4F0E945C0180916C013C
|
||||
:1016400090916D018C35910549F080916C019091DC
|
||||
:101650006D018D35910509F0BDC048C060916E01E6
|
||||
:1016600070916F01462F4F5F9B012250310955E069
|
||||
:10167000529FC001539F900D1124209170018A58F0
|
||||
:101680009E4F0E945C01009172011091730102FB58
|
||||
:10169000DD24D0F8D19401FBCC24C0F8C1940170B2
|
||||
:1016A0001127102F1195E12CF12CA5E0BA2E16C0B0
|
||||
:1016B00060916E0170916F0162507109B69EC00118
|
||||
:1016C000B79E900D1124012F2C2D4D2D6E2D8A5873
|
||||
:1016D0009E4F0E94EF003FEFE31AF30A80917001E2
|
||||
:1016E00090917101E816F9061CF3AFCF20917001BB
|
||||
:1016F0003091710180916E0190916F01232BB1F4B3
|
||||
:101700009C012250310945E0429FC001439F900D4A
|
||||
:10171000112400915601209155014091540160918E
|
||||
:1017200072018A589E4F0E94EF0054C09C012250C3
|
||||
:10173000310945E0429FC001439F900D11248A5812
|
||||
:101740009E4F0E948901E12CF12CC82ED12C15E06E
|
||||
:101750003DC020917001309171012130310541F47B
|
||||
:101760008091720190917301E816F906B1F42BC0D3
|
||||
:101770002230310541F480917201909173018E15F0
|
||||
:101780009F055CF420C023303105E9F4809172019B
|
||||
:1017900090917301E816F906B4F020916E01309132
|
||||
:1017A0006F0122503109129FC001139F900D112427
|
||||
:1017B0000091560120915501409154016E2D8A5897
|
||||
:1017C0009E4F0E94EF008FEFE81AF80AEC14FD0418
|
||||
:1017D0000CF4BFCF80916C0190916D018E35910515
|
||||
:1017E00049F080916C0190916D018F35910509F060
|
||||
:1017F000A0C252C08091720190917301181619060F
|
||||
:1018000034F081E090E09093730180937201209115
|
||||
:101810006E0130916F012250310945E0429FC001B5
|
||||
:10182000439F900D11248A589E4F0E948901E09099
|
||||
:101830007001F0907101C82ED12C15E029C0809163
|
||||
:101840007001909171019701281B390BC9016091BA
|
||||
:101850007201709173010E94DD18892BB1F42091FF
|
||||
:101860006E0130916F0122503109129FC001139F08
|
||||
:10187000900D112400915601209155014091540181
|
||||
:101880006E2D8A589E4F0E94EF003FEFE31AF30A35
|
||||
:10189000EC14FD04A4F2A5CF20916E0130916F01EC
|
||||
:1018A0002250310945E0429FC001439F900D112411
|
||||
:1018B0008A589E4F0E9489012091720130917301D4
|
||||
:1018C000232B59F133C080917001909171012091C7
|
||||
:1018D0006E0130916F0122503109E816F90664F467
|
||||
:1018E000129FC001139F900D112400915601209169
|
||||
:1018F00055014091540108C0129FC001139F900DE3
|
||||
:10190000112400E020E040E06E2D8A589E4F0E9496
|
||||
:10191000EF008FEFE81AF80A05C0E12CF12CC82E71
|
||||
:10192000D12C15E0EC14FD0474F203C2C82ED12CA6
|
||||
:10193000760115E030C0809170019091710196019F
|
||||
:10194000281B390B80916E0190916F01E216F3060E
|
||||
:101950007CF09C0122503109129FC001139F900D11
|
||||
:1019600011240091560120915501409154010BC062
|
||||
:101970009C0122503109129FC001139F900D112428
|
||||
:1019800000E020E040E06E2D8A589E4F0E94EF005C
|
||||
:1019900021E0E21AF108E114F10469F6CAC161E03C
|
||||
:1019A0008091700190917101892B09F460E0209180
|
||||
:1019B0006E0130916F012250310947E0429FC00112
|
||||
:1019C000439F900D11248A559E4F0E94FE027DCCAC
|
||||
:1019D00020916E0130916F0122503109129FC00198
|
||||
:1019E000139F900D1124609170018A559E4F0E94A3
|
||||
:1019F000EC0283CC41E08091720190917301892BBC
|
||||
:101A000009F440E020916E0130916F0122503109BC
|
||||
:101A100057E0529FC001539F900D112460917001B7
|
||||
:101A20008A559E4F0E94CB0280CC20916E0130914E
|
||||
:101A30006F0122503109129FC001139F900D112494
|
||||
:101A4000609170018A559E4F0E94B20286CC90919F
|
||||
:101A5000720180E0609170017091710168277927AF
|
||||
:101A600020916E0130916F0122503109129FC00107
|
||||
:101A7000139F900D11248A559E4F0E94690285CCB8
|
||||
:101A800020916E0130916F0122503109129FC001E7
|
||||
:101A9000139F900D11248A559E4F0E94040380933A
|
||||
:101AA0005F019093600189CC20916E0130916F01AC
|
||||
:101AB00022503109C901880F991F820F931F60912D
|
||||
:101AC00070018C569E4F0E942703A8CC9091720102
|
||||
:101AD00080E06091700170917101682779272091F1
|
||||
:101AE0006E0130916F0122503109C901880F991F91
|
||||
:101AF000820F931FE12C00E024E040E08C569E4FC3
|
||||
:101B00000E94F803A3CC9091720180E06091700173
|
||||
:101B1000709171016827792720916E0130916F01D2
|
||||
:101B200022503109C901880F991F820F931FE12CA0
|
||||
:101B300000E024E041E08C569E4F0E94F8039ECCCA
|
||||
:101B400020916E0130916F0122503109C901880F37
|
||||
:101B5000991F820F931F609172018C569E4F0E94B5
|
||||
:101B60007304898320916E0130916F0122503109F5
|
||||
:101B7000C901880F991F820F931F2091700141E0C6
|
||||
:101B8000BE016F5F7F4F8C569E4F0E94AE038ECC7E
|
||||
:101B900080917201898320916E0130916F012250F2
|
||||
:101BA0003109C901880F991F820F931F209170017D
|
||||
:101BB00041E0BE016F5F7F4F8C569E4F0E94AE0387
|
||||
:101BC0008DCC80917001909171010AE010E0B80114
|
||||
:101BD0000E94DD1820916E0130916F012250310971
|
||||
:101BE000C901880F991F820F931F8C569E4F0E9428
|
||||
:101BF000730489838091700190917101B8010E94F2
|
||||
:101C0000DD1820916E0130916F0122503109A90138
|
||||
:101C1000440F551F420F531F682FCA018C569E4F09
|
||||
:101C20000E94730480688A8380917201909173018D
|
||||
:101C3000B8010E94DD1820916E0130916F01225091
|
||||
:101C40003109C901880F991F820F931F8C569E4F2F
|
||||
:101C50000E9473048B838091720190917301B8018B
|
||||
:101C60000E94DD1820916E0130916F0122503109E0
|
||||
:101C7000A901440F551F420F531F682FCA018C56EC
|
||||
:101C80009E4F0E9473048C8320916E0130916F01EE
|
||||
:101C900022503109C901880F991F820F931F20E03C
|
||||
:101CA00044E0BE016F5F7F4F8C569E4F0E94AE0393
|
||||
:101CB0002DCC10917001A0907201B0907301AA0C0C
|
||||
:101CC000BB1CAA0CBB1CC12CD12C59CC8FEF898317
|
||||
:101CD0008A838B838C8320916E0130916F01225017
|
||||
:101CE0003109C901880F991F820F931F20E044E03A
|
||||
:101CF000BE016F5F7F4F8C569E4F0E94AE035ACC41
|
||||
:101D000019821A821B821C8220916E0130916F0110
|
||||
:101D100022503109C901880F991F820F931F20E0BB
|
||||
:101D200044E0BE016F5F7F4F8C569E4F0E94AE0312
|
||||
:101D300059CC2C960FB6F894DEBF0FBECDBFDF9105
|
||||
:101D4000CF911F910F91FF90EF90DF90CF90BF90B8
|
||||
:101D5000AF90089520911B0230E080911C02281B57
|
||||
:101D60003109C901089580911C0290911B028917C5
|
||||
:101D700050F4E82FF0E0E35EFD4F208130E08F5F0C
|
||||
:101D800080931C0202C02FEF3FEFC9010895E0913C
|
||||
:101D90001C0280911B02E81730F4F0E0E35EFD4F77
|
||||
:101DA000208130E002C02FEF3FEFC9010895089570
|
||||
:101DB000E091F301F091F4013097E1F030911C02D1
|
||||
:101DC00020911B023217B0F040E009C0DC01A20FE5
|
||||
:101DD000B31F5C91D901A35EBD4F5C934F5F242F6D
|
||||
:101DE00030E02617370794F310921C0260931B0211
|
||||
:101DF000CB0109940895E091F501F091F601309737
|
||||
:101E000029F01092F9011092F80109940895CF92E7
|
||||
:101E1000DF92EF92FF920F931F93CF93DF937C019A
|
||||
:101E2000CB018A012091F701222391F0EB016B0194
|
||||
:101E3000C40ED51E09C06991D701ED91FC910190A6
|
||||
:101E4000F081E02DC7010995CC15DD05A1F703C090
|
||||
:101E5000642F0E948E10C801DF91CF911F910F91C6
|
||||
:101E6000FF90EF90DF90CF900895CF93DF931F9274
|
||||
:101E7000CDB7DEB769832091F7012223D1F02091FD
|
||||
:101E8000F801203240F021E030E0FC01338322836E
|
||||
:101E900020E030E015C08091F901E82FF0E0E65035
|
||||
:101EA000FE4F998190838F5F8093F9018093F801B1
|
||||
:101EB00005C061E0CE0101960E948E1021E030E065
|
||||
:101EC000C9010F90DF91CF910895FC011382128216
|
||||
:101ED00048EE53E060E070E0448355836683778387
|
||||
:101EE00084E391E091838083089510921C02109204
|
||||
:101EF0001B021092F9011092F8010C94D40FCF93A9
|
||||
:101F0000DF93EC01862F0E94F20F8BEF9EE00E9480
|
||||
:101F1000AC1088ED9EE00E94A710CE01DF91CF911A
|
||||
:101F20000C94750F0C947F0F862F413208F040E21D
|
||||
:101F30006DE172E00E94F60F10921C0280931B026A
|
||||
:101F4000089521E00C94940F81E08093F701609351
|
||||
:101F50001A021092F9011092F80108950C94A40F3E
|
||||
:101F60000F93062F21E04091F8016AEF71E0809114
|
||||
:101F70001A020E943B101092F9011092F80110927F
|
||||
:101F8000F7010F91089561E00C94B00F7093F40184
|
||||
:101F90006093F30108957093F6016093F50108953D
|
||||
:101FA00087EE91E00C94650F1092460281E08093D9
|
||||
:101FB00044021092430261E082E10E94D51261E086
|
||||
:101FC00083E10E94D512E9EBF0E080818E7F80836F
|
||||
:101FD00080818D7F808382E08093B80085E4809348
|
||||
:101FE000BC000895880F8093BA000895413208F02C
|
||||
:101FF0003FC0909146029111FCCF91E09093460230
|
||||
:10200000209344022FEF20933D0210924202242F8E
|
||||
:102010002150209341029093450290914502880FF0
|
||||
:10202000892B8093450280914302813041F41092C4
|
||||
:102030004302809145028093BB0085EC01C085EE90
|
||||
:102040008093BC00809146028130E1F3809142028E
|
||||
:10205000841710F44091420227E432E0FB01D901D9
|
||||
:1020600002C08D9181938A2F821B8417D0F301C007
|
||||
:1020700040E0842F08950F93413208F046C09091BC
|
||||
:1020800046029111FCCF92E09093460200934402E5
|
||||
:102090009FEF90933D021092420240934102FB0158
|
||||
:1020A00067E472E0DB0102C091919D939A2F961B29
|
||||
:1020B0009417D0F31092450290914502880F892B16
|
||||
:1020C0008093450280914302813041F41092430293
|
||||
:1020D000809145028093BB0085EC01C085EE809322
|
||||
:1020E000BC00222321F0809146028230E1F38091EE
|
||||
:1020F0003D028F3F61F080913D02803251F080912E
|
||||
:102100003D02803341F483E007C081E005C080E0F8
|
||||
:1021100003C082E001C084E00F910895613298F419
|
||||
:1021200020914602243089F460933F02FC0187E647
|
||||
:1021300092E0DC0102C021912D932A2F281B261743
|
||||
:10214000D0F380E0089581E0089582E008959093AF
|
||||
:10215000880280938702089590938A02809389026F
|
||||
:10216000089585ED8093BC008091BC0084FDFCCF78
|
||||
:1021700010924602089585EC8093BC0010924602AE
|
||||
:1021800008951F920F920FB60F9211242F933F9331
|
||||
:102190004F935F936F937F938F939F93AF93BF936F
|
||||
:1021A000EF93FF938091B900887F803609F49FC038
|
||||
:1021B00058F5883209F45BC090F4803109F452C0BC
|
||||
:1021C00038F4882309F4F8C0883009F0F9C04AC00F
|
||||
:1021D000883109F44CC0803209F0F2C05CC0803410
|
||||
:1021E00009F46BC038F4803309F455C0883309F022
|
||||
:1021F000E7C054C0803509F454C0883509F462C082
|
||||
:10220000883409F0DDC0DAC0883909F4CBC0A8F4FD
|
||||
:10221000883709F46CC038F4883609F468C0803710
|
||||
:1022200009F0CEC064C0883809F4BCC0803909F414
|
||||
:1022300064C0803809F0C4C060C0803B09F48AC023
|
||||
:1022400038F4803A09F46BC0883A09F0B9C082C00A
|
||||
:10225000803C09F4ABC0883C09F4A8C0883B09F075
|
||||
:10226000AFC08DC0809145028093BB0012C0909199
|
||||
:10227000420280914102981788F580914202E82F2E
|
||||
:10228000F0E0E95BFD4F90819093BB008F5F8093FE
|
||||
:10229000420285EC88C080933D0290C080933D024D
|
||||
:1022A00056C0809142029091BB00E82FF0E0E95BBC
|
||||
:1022B000FD4F90838F5F8093420290914202809104
|
||||
:1022C00041026DC0809142029091BB00E82FF0E086
|
||||
:1022D000E95BFD4F90838F5F8093420280914402BF
|
||||
:1022E00081116CC081E08093430284EA60C083E086
|
||||
:1022F0008093460210923E02CCCF80913E02803203
|
||||
:1023000008F050C080913E029091BB00E82FF0E0B1
|
||||
:10231000E557FD4F90838F5F80933E02BACF809147
|
||||
:102320003E02803230F4E0913E02F0E0E557FD4F8E
|
||||
:1023300010820E94B11060913E02E0918702F091FC
|
||||
:10234000880270E08BE892E0099510923E020E94AC
|
||||
:10235000BB1036C084E08093460210924002109277
|
||||
:102360003F02E0918902F0918A02099580913F0233
|
||||
:10237000811105C081E080933F0210926702809135
|
||||
:102380004002E82FF0E0E959FD4F90819093BB00A7
|
||||
:102390008F5F809340029091400280913F02981796
|
||||
:1023A00008F477CF85E88093BC000AC085EC809361
|
||||
:1023B000BC001092460204C010923D020E94B1106F
|
||||
:1023C000FF91EF91BF91AF919F918F917F916F910D
|
||||
:1023D0005F914F913F912F910F900FBE0F901F90E3
|
||||
:1023E00018958E3008F08E5087702091060140E4D9
|
||||
:1023F000249F90011124822B80937C0080917A008D
|
||||
:10240000806480937A0080917A0086FDFCCF2091D1
|
||||
:10241000780030917900932F80E0AC01422B9A0133
|
||||
:10242000C90108951F93CF93DF93182FEB0161E04B
|
||||
:102430000E949D12209711F460E004C0CF3FD105A7
|
||||
:1024400039F461E0812FDF91CF911F910C94D51267
|
||||
:10245000E12FF0E0E859FF4FE491E330B9F028F4C0
|
||||
:10246000E13051F0E230B1F50CC0E63019F1E7305F
|
||||
:1024700049F1E43079F514C084B5806884BDC7BDE6
|
||||
:102480002EC084B5806284BDC8BD29C08091800003
|
||||
:10249000806880938000D0938900C09388001FC01B
|
||||
:1024A00080918000806280938000D0938B00C093E5
|
||||
:1024B0008A0015C08091B00080688093B000C093FE
|
||||
:1024C000B3000DC08091B00080628093B000C093D3
|
||||
:1024D000B40005C0C038D1050CF0B3CFADCFDF914B
|
||||
:1024E000CF911F910895833069F028F48130A1F0D5
|
||||
:1024F000823011F514C08630B1F08730C1F08430DD
|
||||
:10250000D9F404C0809180008F7703C0809180004F
|
||||
:102510008F7D80938000089584B58F7702C084B545
|
||||
:102520008F7D84BD08958091B0008F7703C0809126
|
||||
:10253000B0008F7D8093B0000895CF93DF9390E03B
|
||||
:10254000FC01E458FF4F4491FC01E057FF4F849198
|
||||
:10255000882341F190E0880F991FFC01E854FF4F58
|
||||
:1025600025913491D90182559F4FFC018591949119
|
||||
:10257000C82FD92F9FB7F8948C91611106C0409550
|
||||
:1025800084238C938881842308C0623041F4242FF3
|
||||
:10259000209582238C938881842B888302C0842B8E
|
||||
:1025A0008C939FBFDF91CF9108950F931F93CF938B
|
||||
:1025B000DF931F92CDB7DEB7282F30E0F901E8593D
|
||||
:1025C000FF4F8491F901E458FF4F1491F901E0574E
|
||||
:1025D000FF4F04910023D1F0882321F069830E94EA
|
||||
:1025E00073126981E02FF0E0EE0FFF1FE255FF4FFD
|
||||
:1025F00085919491DC019FB7F8948C91611103C08F
|
||||
:102600001095812301C0812B8C939FBF0F90DF9188
|
||||
:10261000CF911F910F910895CF93DF93282F30E032
|
||||
:10262000F901E859FF4F8491F901E458FF4FD49123
|
||||
:10263000F901E057FF4FC491CC2389F081110E942A
|
||||
:102640007312EC2FF0E0EE0FFF1FEC55FF4F85915A
|
||||
:102650009491DC018C918D2321E030E011F420E095
|
||||
:1026600030E0C901DF91CF9108958F929F92AF9290
|
||||
:10267000BF92CF92DF92EF92FF920F931F93CF936F
|
||||
:10268000DF9390E0FC01E458FF4FD491FC01E05748
|
||||
:10269000FF4F7491611102C0C0E001C0CD2FDA017B
|
||||
:1026A000C901880F991FAA1FBB1F54E0B695A795B3
|
||||
:1026B000979587955A95D1F7672F70E0660F771F2A
|
||||
:1026C0006C557F4F812C912C5401FB010591149185
|
||||
:1026D00010C0C12CD12C7601C394C80CD91CEA1CA3
|
||||
:1026E000FB1C88169906AA06BB0609F448C04601D9
|
||||
:1026F0005701F801E081ED23EC1759F310C0C12C0C
|
||||
:10270000D12C7601C394C80CD91CEA1CFB1C88167A
|
||||
:102710009906AA06BB0699F14601570103C0FB01C1
|
||||
:1027200005911491F801E081ED23EC13E8CF8819AD
|
||||
:102730009909AA09BB0920E030E0A901FB016591D4
|
||||
:10274000749109C0281739074A075B07C1F02F5F4A
|
||||
:102750003F4F4F4F5F4FFB01E081ED23EC1791F3AB
|
||||
:10276000A5E1B0E00E94D2188B019C01005F1F4FD1
|
||||
:102770002F4F3F4F369527951795079503C000E0DB
|
||||
:1027800010E09801B801C901DF91CF911F910F911D
|
||||
:10279000FF90EF90DF90CF90BF90AF909F908F9081
|
||||
:1027A00008951F920F920FB60F9211242F933F930B
|
||||
:1027B0008F939F93AF93BF938091AB029091AC02A4
|
||||
:1027C000A091AD02B091AE023091B302232F285EEA
|
||||
:1027D0002D3720F40896A11DB11D05C0232F2556C5
|
||||
:1027E0000996A11DB11D2093B3028093AB02909373
|
||||
:1027F000AC02A093AD02B093AE028091AF02909173
|
||||
:10280000B002A091B102B091B2020196A11DB11D1A
|
||||
:102810008093AF029093B002A093B102B093B20242
|
||||
:10282000BF91AF919F918F913F912F910F900FBECC
|
||||
:102830000F901F9018950F931F938FB7F8940091E6
|
||||
:10284000AB021091AC022091AD023091AE028FBF6D
|
||||
:10285000B801C9011F910F9108950F931F939FB75E
|
||||
:10286000F8940091AF021091B0022091B102309122
|
||||
:10287000B20286B5A89B06C08F3F21F00F5F1F4FA5
|
||||
:102880002F4F3F4F9FBF322F212F102F0027080FB0
|
||||
:10289000111D211D311D45E0000F111F221F331F87
|
||||
:1028A0004A95D1F7B801C9011F910F910895CF92B0
|
||||
:1028B000DF92EF92FF92CF93DF936B017C010E9436
|
||||
:1028C0002D14EB010EC00E942D146C1B7D0B683E75
|
||||
:1028D000734038F081E0C81AD108E108F108C85106
|
||||
:1028E000DC4FC114D104E104F10469F7DF91CF9109
|
||||
:1028F000FF90EF90DF90CF900895019739F0019706
|
||||
:1029000029F0880F991F01970197F1F7089578949E
|
||||
:1029100084B5826084BD84B5816084BD85B58260E4
|
||||
:1029200085BD85B5816085BDEEE6F0E08081816082
|
||||
:102930008083E1E8F0E01082808182608083E0E8BB
|
||||
:10294000F0E0808181608083E1EBF0E08081846051
|
||||
:102950008083E0EBF0E0808181608083EAE7F0E053
|
||||
:1029600080818460808380818260808380818160B7
|
||||
:1029700080838081806880831092C1000895CF9207
|
||||
:10298000DF92EF92FF920F931F93CF93DF936C012F
|
||||
:10299000EB017A01E60EF71E00E010E00BC0699132
|
||||
:1029A000D601ED91FC910190F081E02DC6010995D1
|
||||
:1029B000080F191FCE15DF0591F7C801DF91CF91E0
|
||||
:1029C0001F910F91FF90EF90DF90CF900895DB0162
|
||||
:1029D0000D900020E9F7AD0141505109461B570BFE
|
||||
:1029E000DC01ED91FC910280F381E02D09940C94BF
|
||||
:1029F000E714DC01ED91FC910190F081E02D099448
|
||||
:102A00000F931F93CF93DF93EC016DE00E94F914B5
|
||||
:102A10008C016AE0CE010E94F9149C01200F311F45
|
||||
:102A2000C901DF91CF911F910F9108950F931F93CB
|
||||
:102A3000CF93DF93EC010E94E7148C01CE010E943A
|
||||
:102A400000159801280F391FC901DF91CF911F91FF
|
||||
:102A50000F9108950E9487140E948C07C6E0D6E16A
|
||||
:102A60000E94AC072097E1F30E940616F9CFFC0103
|
||||
:102A700084859585FC01E05CFF4F20813181FC015C
|
||||
:102A8000EE5BFF4F80819181281B390B2F73332719
|
||||
:102A9000C9010895FC0184859585FC01E05CFF4F28
|
||||
:102AA00040815181FC01EE5BFF4F20813181421753
|
||||
:102AB000530741F00190F081E02DE80FF91F2081CC
|
||||
:102AC00030E002C02FEF3FEFC9010895FC0184857B
|
||||
:102AD0009585FC01E05CFF4F40815181FC01EE5B7C
|
||||
:102AE000FF4F208131814217530781F0A081B181CE
|
||||
:102AF000A80FB91F8C91208131812F5F3F4F2F7319
|
||||
:102B0000332731832083282F30E002C02FEF3FEF9F
|
||||
:102B1000C9010895FC0186859785FC01E05CFF4FA3
|
||||
:102B2000DC01AE5BBF4F408151812D913C911197EB
|
||||
:102B300042175307C1F70895CF93DF93FC018685B1
|
||||
:102B40009785DC01A05CBF4F2D913C9111972F5FC1
|
||||
:102B50003F4F2F733327EC01CE5BDF4F4881598104
|
||||
:102B600024173507D9F30D90BC91A02DA80FB91FDC
|
||||
:102B70006C93A685B785A05CBF4F11963C932E93AE
|
||||
:102B8000A689B7892C9181E090E0058C02C0880F5E
|
||||
:102B9000991F0A94E2F7282B2C9381E090E0DF91B3
|
||||
:102BA000CF91089508951F920F920FB60F9211249E
|
||||
:102BB0002F933F934F938F939F93EF93FF93409166
|
||||
:102BC000C600809157039091580301968F739927FF
|
||||
:102BD0002091590330915A038217930759F0E091DD
|
||||
:102BE0005703F0915803E95EFC4F408390935803DC
|
||||
:102BF00080935703FF91EF919F918F914F913F9158
|
||||
:102C00002F910F900FBE0F901F90189584EB92E0BC
|
||||
:102C10000E943715892B11F00C94D21508951F923C
|
||||
:102C20000F920FB60F9211242F933F938F939F9380
|
||||
:102C3000EF93FF93209113033091140380911503B8
|
||||
:102C4000909116032817390731F48091C1008F7DC8
|
||||
:102C50008093C10014C0E0911503F0911603ED526A
|
||||
:102C6000FD4F2081809115039091160301968F737B
|
||||
:102C7000992790931603809315032093C600FF9124
|
||||
:102C8000EF919F918F913F912F910F900FBE0F90D9
|
||||
:102C90001F901895CF92DF92EF92FF92CF93DF9320
|
||||
:102CA000EC016A017B01EC89FD8981E090E00E8CEA
|
||||
:102CB00002C0880F991F0A94E2F7808360E271EAEC
|
||||
:102CC00087E090E0A70196010E94F1182150310998
|
||||
:102CD000410951095695479537952795211580E16A
|
||||
:102CE000380798F0EC89FD89108260E970ED83E087
|
||||
:102CF00090E0A70196010E94F11821503109410985
|
||||
:102D000051095695479537952795E889F989308374
|
||||
:102D1000EA89FB892083EE89FF89408181E090E088
|
||||
:102D20009C010A8C02C0220F331F0A94E2F7422B47
|
||||
:102D30004083EE89FF8940819C010B8C02C0220FE9
|
||||
:102D4000331F0A94E2F7422B4083EE89FF894081CA
|
||||
:102D50009C010C8C02C0220F331F0A94E2F7422B15
|
||||
:102D60004083EE89FF8920810D8C02C0880F991F56
|
||||
:102D70000A94E2F7809582238083DF91CF91FF90C0
|
||||
:102D8000EF90DF90CF9008951092B7021092B602A4
|
||||
:102D900088EE93E0A0E0B0E08093B8029093B9028F
|
||||
:102DA000A093BA02B093BB0284E491E09093B50281
|
||||
:102DB0008093B40287E193E09093C1028093C002B4
|
||||
:102DC00083ED92E09093C3028093C20285EC90E081
|
||||
:102DD0009093C5028093C40284EC90E09093C70264
|
||||
:102DE0008093C60280EC90E09093C9028093C80261
|
||||
:102DF00081EC90E09093CB028093CA0286EC90E045
|
||||
:102E00009093CD028093CC0284E08093CE0283E045
|
||||
:102E10008093CF0287E08093D00285E08093D10237
|
||||
:102E200081E08093D20208955058BB27AA270ED084
|
||||
:102E30001CC10DD130F012D120F031F49F3F11F4BC
|
||||
:102E40001EF402C10EF4E095E7FBF8C0E92F1ED195
|
||||
:102E500080F3BA17620773078407950718F071F4B7
|
||||
:102E60009EF536C10EF4E0950B2EBA2FA02D0B0166
|
||||
:102E7000B90190010C01CA01A0011124FF27591BBF
|
||||
:102E800099F0593F50F4503E68F11A16F040A22FC5
|
||||
:102E9000232F342F4427585FF3CF46953795279536
|
||||
:102EA000A795F0405395C9F77EF41F16BA0B620B35
|
||||
:102EB000730B840BBAF09150A1F0FF0FBB1F661F7C
|
||||
:102EC000771F881FC2F70EC0BA0F621F731F841FBF
|
||||
:102ED00048F4879577956795B795F7959E3F08F0E5
|
||||
:102EE000B3CF9395880F08F09927EE0F97958795A4
|
||||
:102EF00008950CD0BAC0B2D040F0A9D030F021F47F
|
||||
:102F00005F3F19F09BC05111E4C09EC0BFD098F341
|
||||
:102F10009923C9F35523B1F3951B550BBB27AA275A
|
||||
:102F200062177307840738F09F5F5F4F220F331FCC
|
||||
:102F3000441FAA1FA9F333D00E2E3AF0E0E830D098
|
||||
:102F400091505040E695001CCAF729D0FE2F27D09B
|
||||
:102F5000660F771F881FBB1F261737074807AB0769
|
||||
:102F6000B0E809F0BB0B802DBF01FF2793585F4FDE
|
||||
:102F70002AF09E3F510568F061C0ABC05F3FECF3A3
|
||||
:102F8000983EDCF3869577956795B795F7959F5FA3
|
||||
:102F9000C9F7880F911D9695879597F90895E1E0F7
|
||||
:102FA000660F771F881FBB1F621773078407BA0756
|
||||
:102FB00020F0621B730B840BBA0BEE1F88F7E095B1
|
||||
:102FC0000895E89409C097FB3EF49095809570951C
|
||||
:102FD00061957F4F8F4F9F4F9923A9F0F92F96E965
|
||||
:102FE000BB279395F695879577956795B795F111DA
|
||||
:102FF000F8CFFAF4BB0F11F460FF1BC06F5F7F4F77
|
||||
:103000008F4F9F4F16C0882311F096E911C0772388
|
||||
:1030100021F09EE8872F762F05C0662371F096E891
|
||||
:10302000862F70E060E02AF09A95660F771F881F60
|
||||
:10303000DAF7880F9695879597F9089597F99F671E
|
||||
:1030400080E870E060E008959FEF80EC0895002430
|
||||
:103050000A941616170618060906089500240A94FD
|
||||
:1030600012161306140605060895092E0394000C83
|
||||
:1030700011F4882352F0BB0F40F4BF2B11F460FF12
|
||||
:1030800004C06F5F7F4F8F4F9F4F089557FD90583B
|
||||
:10309000440F551F59F05F3F71F04795880F97FB1C
|
||||
:1030A000991F61F09F3F79F08795089512161306D6
|
||||
:1030B0001406551FF2CF4695F1DF08C01616170605
|
||||
:1030C0001806991FF1CF869571056105089408953A
|
||||
:1030D000E894BB2766277727CB0197F908950BD093
|
||||
:1030E000C4CFB5DF28F0BADF18F0952309F0A6CFDA
|
||||
:1030F000ABCF1124EECFCADFA0F3959FD1F3950F8C
|
||||
:1031000050E0551F629FF001729FBB27F00DB11D6B
|
||||
:10311000639FAA27F00DB11DAA1F649F6627B00DFB
|
||||
:10312000A11D661F829F2227B00DA11D621F739FE4
|
||||
:10313000B00DA11D621F839FA00D611D221F749FF2
|
||||
:103140003327A00D611D231F849F600D211D822F39
|
||||
:10315000762F6A2F11249F5750408AF0E1F0882380
|
||||
:103160004AF0EE0FFF1FBB1F661F771F881F91508D
|
||||
:103170005040A9F79E3F510570F060CFAACF5F3F46
|
||||
:10318000ECF3983EDCF3869577956795B795F795C0
|
||||
:10319000E7959F5FC1F7FE2B880F911D9695879548
|
||||
:1031A00097F908950E942F19A59F900DB49F900D37
|
||||
:1031B000A49F800D911D1124089597FB072E16F4EE
|
||||
:1031C000009407D077FD09D00E943B1907FC05D079
|
||||
:1031D0003EF4909581959F4F0895709561957F4F2E
|
||||
:1031E0000895A1E21A2EAA1BBB1BFD010DC0AA1F48
|
||||
:1031F000BB1FEE1FFF1FA217B307E407F50720F060
|
||||
:10320000A21BB30BE40BF50B661F771F881F991FDA
|
||||
:103210001A9469F760957095809590959B01AC0123
|
||||
:10322000BD01CF010895052E97FB16F4009407D039
|
||||
:1032300057FD0DD00E94F11807FC09D07EF490953F
|
||||
:103240008095709561957F4F8F4F9F4F0895509552
|
||||
:103250004095309521953F4F4F4F5F4F0895A29F66
|
||||
:10326000B001B39FC001A39F01D0B29F700D811D1B
|
||||
:103270001124911D0895AA1BBB1B51E107C0AA1F71
|
||||
:10328000BB1FA617B70710F0A61BB70B881F991F07
|
||||
:103290005A95A9F780959095BC01CD010895EE0F40
|
||||
:1032A000FF1F0590F491E02D09940F931F93CF9386
|
||||
:1032B000DF93689F8001699F100D789F100D112486
|
||||
:1032C000C8010E947319C82FD92F209731F0A80187
|
||||
:1032D00060E070E08C2F0E94AA1ACE01DF91CF919E
|
||||
:1032E0001F910F9108950F931F93CF93DF93823017
|
||||
:1032F000910510F482E090E0E0915D03F0915E03AF
|
||||
:1033000020E030E0C0E0D0E023C040815181481788
|
||||
:103310005907A8F04817590761F4828193812097D3
|
||||
:1033200019F09B838A832EC090935E0380935D0384
|
||||
:1033300029C02115310529F04217530710F0A901C2
|
||||
:1033400002C0BE01DF0102811381EF019A01F80181
|
||||
:103350003097D9F62115310509F1281B390B243096
|
||||
:10336000310590F412968D919C911397611571051A
|
||||
:1033700021F0FB019383828304C090935E038093CA
|
||||
:103380005D03FD01329644C0FD01E20FF31F8193FE
|
||||
:103390009193225031092D933C933AC020915B03C5
|
||||
:1033A00030915C03232B41F4209102013091030101
|
||||
:1033B00030935C0320935B03209100013091010165
|
||||
:1033C0002115310541F42DB73EB7409104015091CC
|
||||
:1033D0000501241B350BE0915B03F0915C03E217C0
|
||||
:1033E000F307A0F42E1B3F0B2817390778F0AC0128
|
||||
:1033F0004E5F5F4F2417350748F04E0F5F1F509305
|
||||
:103400005C0340935B038193919302C0E0E0F0E0A2
|
||||
:10341000CF01DF91CF911F910F910895EF92FF920D
|
||||
:103420000F931F93CF93DF93009709F48EC0DC01B5
|
||||
:10343000129713961C921E921297E0905D03F090E3
|
||||
:103440005E03E114F10489F42D913C911197280F4A
|
||||
:10345000391F80915B0390915C038217930789F574
|
||||
:10346000B0935C03A0935B0370C0E70120E030E001
|
||||
:1034700001C0EA01CA17DB0738F44A815B819E016B
|
||||
:1034800041155105B1F722C0AC0142505109FA0172
|
||||
:10349000D383C28300811181BC01600F711F6C173F
|
||||
:1034A0007D0761F468817981600F711F6E5F7F4FC6
|
||||
:1034B000718360836A817B81738362832115310507
|
||||
:1034C00029F4B0935E03A0935D033FC0F901B38379
|
||||
:1034D000A283E90149915991C40FD51FAC17BD07CB
|
||||
:1034E00071F4DC019E918E91840F951F0296918359
|
||||
:1034F000808312968D919C91139793838283A0E091
|
||||
:10350000B0E002C0D7017C01F7018281938100976E
|
||||
:10351000C9F7C701029620813181820F931F209144
|
||||
:103520005B0330915C032817390779F4109729F46D
|
||||
:1035300010925E0310925D0304C013961C921E92BB
|
||||
:103540001297F0925C03E0925B03CDB7DEB7E6E042
|
||||
:103550000C94BD1ADC0101C06D9341505040E0F75E
|
||||
:1035600008952A88398848885F846E847D848C8495
|
||||
:103570009B84AA84B984C884DF80EE80FD800C819E
|
||||
:103580001B81AA81B981CE0FD11D0FB6F894DEBF81
|
||||
:0C3590000FBECDBFED010895F894FFCFF1
|
||||
:10359C0000005F0320000101000A006400E8033F03
|
||||
:1035AC00065B4F666D7D077F6F777C395E79715254
|
||||
:1035BC00656164206661696C005265616479210003
|
||||
:1035CC0000000000350F070FAA0EB30EC70ED70E62
|
||||
:1035DC00000000009C15BF14371566154A158A1596
|
||||
:00000001FF
|
||||
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr7.cpp.hex
Normal file
864
Script/multi_grovepi_installer/grove_pi_v1_2_2_addr7.cpp.hex
Normal file
|
|
@ -0,0 +1,864 @@
|
|||
:100000000C9463000C948B000C948B000C948B006C
|
||||
:100010000C948B000C948B000C948B000C948B0034
|
||||
:100020000C948B000C948B000C948B000C948B0024
|
||||
:100030000C948B000C948B000C948B000C948B0014
|
||||
:100040000C94D1130C948B000C94D3150C940F16B4
|
||||
:100050000C948B000C948B000C948B000C948B00F4
|
||||
:100060000C94C1100C948B000000000700020100EA
|
||||
:100070000003040600000000000000000102040864
|
||||
:100080001020408001020408102001020408102002
|
||||
:10009000040404040404040402020202020203032E
|
||||
:1000A00003030303000000002300260029000000D2
|
||||
:1000B0000000250028002B0000000000240027007D
|
||||
:1000C0002A00D00FC41611241FBECFEFD8E0DEBF28
|
||||
:1000D000CDBF11E0A0E0B1E0ECE9F5E302C005908E
|
||||
:1000E0000D92A035B107D9F713E0A0E5B1E001C04A
|
||||
:1000F0001D92AF35B107E1F710E0C6ECD0E004C0C7
|
||||
:100100002297FE010E945119C23CD107C9F70E94F3
|
||||
:100110002A150C94CC1A0C940000CF93DF93EC01B9
|
||||
:1001200060E088810E94D51284E190E00E947D14F5
|
||||
:1001300061E088810E94D51284E190E0DF91CF9147
|
||||
:100140000C947D140F931F93CF93DF93EC01062F34
|
||||
:1001500018E007FF02C061E001C060E089810E94F1
|
||||
:10016000D512CE010E948D00000F115091F7DF9142
|
||||
:10017000CF911F910F910895EF92FF921F93CF930C
|
||||
:10018000DF9300D0CDB7DEB77C01162F27FF02C06A
|
||||
:1001900060EC01C060EE26FF606147FF686046FFCB
|
||||
:1001A000646017FF626016FF6160C70129834A839C
|
||||
:1001B0000E94A2002981622FC7010E94A2004A81E9
|
||||
:1001C000642FC7010E94A200612FC7010F900F90FA
|
||||
:1001D000DF91CF911F91FF90EF900C94A2007F923E
|
||||
:1001E0008F929F92AF92BF92CF92DF92EF92FF9247
|
||||
:1001F0000F931F93CF93DF93EC01162F942E822E33
|
||||
:1002000060E00E94A20060E0CE010E94A20060E0D7
|
||||
:10021000CE010E94A20060E0CE010E94A20083E015
|
||||
:10022000189F7001112467018FEFC81AD80A57016F
|
||||
:1002300082E0A80EB11C712C1FC071120FC0EB819F
|
||||
:10024000FC81EE0DFF1D9082EB81FC81EC0DFD1D0C
|
||||
:100250008082EB81FC81EA0DFB1D0083EB81FC8138
|
||||
:1002600083E0789EE00DF11D11242281418160819F
|
||||
:10027000CE010E94BC0073948A817816F0F260E08F
|
||||
:10028000CE010E94A20060E0CE010E94A20060E0C8
|
||||
:10029000CE010E94A20060E0CE01DF91CF911F91BC
|
||||
:1002A0000F91FF90EF90DF90CF90BF90AF909F9015
|
||||
:1002B0008F907F900C94A2000F931F93CF93DF93A6
|
||||
:1002C000EC01862F688349832A8361E00E949D1296
|
||||
:1002D00061E089810E949D128A8161E070E023E0E3
|
||||
:1002E000829FC00111240E9455198B839C8310E0CA
|
||||
:1002F00008C000E020E040E0612FCE010E94EF0046
|
||||
:100300001F5F8A811817A8F3DF91CF911F910F917A
|
||||
:100310000895FC018281089587EE91E00C94750F99
|
||||
:10032000CF93DF93EC0168E670E087EE91E00E94E6
|
||||
:10033000AE0F60E087EE91E00E94350F87EE91E00E
|
||||
:100340000E94C30F47E050E068E670E087EE91E05E
|
||||
:100350000E94A10F87EE91E00E94B30E382F3695D0
|
||||
:10036000369536953E70232F220F220F230F8F7064
|
||||
:100370009927280F288387EE91E00E94B30E282F3B
|
||||
:1003800022952F708F7099273AE0239F800D1124BA
|
||||
:10039000898387EE91E00E94B30E382F369536950B
|
||||
:1003A00036953670232F220F220F230F8F70992737
|
||||
:1003B000280F2A8387EE91E00E94B30E282F229502
|
||||
:1003C0002F708F7099273AE0239F800D11248B8323
|
||||
:1003D00087EE91E00E94B30E282F22952F708F7028
|
||||
:1003E00099273AE0239F800D11248C8387EE91E0BA
|
||||
:1003F0000E94B30E282F22952F708F7099273AE014
|
||||
:10040000239F800D11248D8387EE91E00E94B30E0F
|
||||
:10041000282F22952F708F7099273AE0239F800D07
|
||||
:1004200011248E831F82DF91CF910895CF93DF93A4
|
||||
:10043000EC01862F688319824A831B822C831E82DB
|
||||
:100440001D8261E00E949D1261E08A81DF91CF915F
|
||||
:100450000C949D121F93CF93DF93EC0160E08A818F
|
||||
:100460000E94D5128AE090E00E947D1414E061E0C1
|
||||
:100470008A810E94D51260E08A810E94D5121150B3
|
||||
:10048000B1F7DF91CF911F910895FF920F931F93C2
|
||||
:10049000CF93DF93EC018B0190E1F92E612F661F62
|
||||
:1004A0006627661F8A810E94D51288810E940C13DC
|
||||
:1004B00061E0892B09F060E088810E94D512000F6D
|
||||
:1004C000111FFA9459F7DF91CF911F910F91FF906F
|
||||
:1004D0000895EF92FF920F931F93CF93DF93EC0158
|
||||
:1004E0007B01CB0193709E838D8360E070E0CE0131
|
||||
:1004F0000E94450200E010E08C81882351F0C70182
|
||||
:10050000002E02C0880F991F0A94E2F791FF0DC0D8
|
||||
:1005100009C0C701002E02C0969587950A94E2F79C
|
||||
:1005200080FF03C06FEF70E002C060E070E0CE01BA
|
||||
:100530000E9445020F5F1F4F0A301105E9F660E087
|
||||
:1005400070E0CE010E94450260E070E0CE010E94A2
|
||||
:100550004502CE01DF91CF911F910F91FF90EF9057
|
||||
:100560000C942A02662321F06B3018F06AE001C077
|
||||
:1005700061E0262F215061E070E002C0660F771F16
|
||||
:100580002A95E2F7FC01258136816227732776835D
|
||||
:1005900065830C946902662321F06B3018F06AE0E1
|
||||
:1005A00001C061E0562F5150FC012581368161E088
|
||||
:1005B00070E002C0660F771F5A95E2F7442319F0E6
|
||||
:1005C000622B732B04C06095709562237323FC012A
|
||||
:1005D000768365830C9469026B3008F06AE02FEF34
|
||||
:1005E0003FEF02C0220F331F6A95E2F72095309546
|
||||
:1005F000FC0136832583B9010C946902FC016483F4
|
||||
:10060000658176810C946902FC018581968108954B
|
||||
:10061000FC0181E020813181232B09F480E00895E1
|
||||
:10062000CF93DF93EC01862F6883498360E00E94BB
|
||||
:100630009D1260E089810E949D1260E088810E9485
|
||||
:10064000D51260E08981DF91CF910C94D51268308A
|
||||
:1006500010F4685F01C06FE0FC016283089561E0FF
|
||||
:10066000FC0181810E949D1282E390E00C947D1434
|
||||
:10067000CF93DF93EC0161E089810E949D1282E3B8
|
||||
:1006800090E00E947D1460E088810E949D1282E3C8
|
||||
:1006900090E00E947D1460E089810E949D1282E3B7
|
||||
:1006A00090E0DF91CF910C947D140F931F93CF9323
|
||||
:1006B000DF93EC01062F18E061E088810E949D1213
|
||||
:1006C00082E390E00E947D1400FF02C060E001C060
|
||||
:1006D00061E089810E949D1282E390E00E947D1476
|
||||
:1006E00060E088810E949D1282E390E00E947D1468
|
||||
:1006F0000695115009F761E088810E949D1260E023
|
||||
:1007000089810E949D1282E390E00E947D1460E046
|
||||
:1007100088810E949D1282E390E00E947D1489816D
|
||||
:100720000E940C13182F811104C061E089810E947E
|
||||
:100730009D1282E390E00E947D1461E088810E9416
|
||||
:100740009D1282E390E00E947D1481E0111101C0AE
|
||||
:1007500080E0DF91CF911F910F910895CF92DF92AA
|
||||
:10076000EF92FF920F931F93CF93DF9300D0CDB7FB
|
||||
:10077000DEB76C01F62EE42E29837A830E942F03C4
|
||||
:1007800060E4C6010E945503C6010E943803C601F9
|
||||
:100790000E942F032981622F63706054C6010E945A
|
||||
:1007A00055030F2D7A81172F06C0F80161918F0133
|
||||
:1007B000C6010E945503802F8F198E15B0F3C60114
|
||||
:1007C0000E943803C6010E942F03F601628160581F
|
||||
:1007D000C6010E945503C6010F900F90DF91CF9183
|
||||
:1007E0001F910F91FF90EF90DF90CF900C94380302
|
||||
:1007F0004F925F926F927F928F929F92AF92BF9231
|
||||
:10080000CF92DF92EF920F931F93CF93DF9300D09D
|
||||
:1008100000D0CDB7DEB73C016B01322F202F8FE027
|
||||
:10082000A82E81E0B82E88248394912C8C0E9D1ED6
|
||||
:10083000F40101E01FE3D5015E904E905D01C60119
|
||||
:10084000B2010E94DD186115710561F4411106C005
|
||||
:10085000002321F08E2F8819833011F4108313C0E8
|
||||
:10086000108211C0DB01AF70BB27A15FBE4F8C911E
|
||||
:100870008083649DC001659D900D749D900D112431
|
||||
:10088000C81AD90A00E0EE2039F08E2F881981307D
|
||||
:1008900019F48081806880833196B7E0AB16B1E0AF
|
||||
:1008A000BB0649F684E090E0831B9109BE016F5FAF
|
||||
:1008B0007F4F680F791F432FC3010E94AE030F9033
|
||||
:1008C0000F900F900F90DF91CF911F910F91EF90AC
|
||||
:1008D000DF90CF90BF90AF909F908F907F906F9060
|
||||
:1008E0005F904F9008956F70E62FF0E0E15FFE4F4C
|
||||
:1008F00080810895FC0181E09081911101C080E028
|
||||
:1009000008951F93CF93DF931F92CDB7DEB7162FB5
|
||||
:1009100087EE91E049830E94750F6CE470E087EEEA
|
||||
:1009200091E00E94AE0F612F87EE91E00E94350F9B
|
||||
:100930004981642F87EE91E00E94350F87EE91E0A8
|
||||
:100940000F90DF91CF911F910C94C30F462F67E05A
|
||||
:100950000C948104462F68E00C948104CF93DF93BC
|
||||
:10096000EC0160E00E94A60460E0CE010E94AA04AF
|
||||
:1009700061E0CE01DF91CF910C94A6044F925F927B
|
||||
:100980006F927F928F929F92AF92BF92CF92DF929F
|
||||
:10099000EF92FF920F931F93CF93DF9300D01F929C
|
||||
:1009A000CDB7DEB75B016A01790180E48B838A836E
|
||||
:1009B00089830E941B142B013C010DC00E941B1453
|
||||
:1009C0006419750986099709653F7140810591058C
|
||||
:1009D00014F080E06EC087EE91E00E94AA0E181617
|
||||
:1009E000190664F387EE91E00E94B30E43E050E0F5
|
||||
:1009F0006CE470E087EE91E00E94A10F0E941B144E
|
||||
:100A00002B013C018E010F5F1F4F48012DC0C80113
|
||||
:100A1000881999090397D4F40E941B142B013C01F7
|
||||
:100A200011C087EE91E00E94B30EF80180830E940E
|
||||
:100A30001B146419750986099709633371058105CB
|
||||
:100A400091053CF6F8018081803458F70E941B1410
|
||||
:100A50000F5F1F4F6419750986099709653F71403B
|
||||
:100A6000810591050CF0B5CF87EE91E00E94AA0EAA
|
||||
:100A7000892B69F69981892F880F880F95FD8D5FE5
|
||||
:100A800085958595F50180839A81892F880F880F38
|
||||
:100A900095FD8D5F85958595F60180839B81892FD6
|
||||
:100AA000880F880F95FD8D5F85958595F70180836B
|
||||
:100AB00081E00F900F900F90DF91CF911F910F91D8
|
||||
:100AC000FF90EF90DF90CF90BF90AF909F908F906E
|
||||
:100AD0007F906F905F904F900895CF93DF93EC01DC
|
||||
:100AE000862F6E834F83288791E09D8760E00E9468
|
||||
:100AF0009D1261E08E810E94D51219861A861B868E
|
||||
:100B00001C86DF91CF910895DF92EF92FF920F93B1
|
||||
:100B10001F93CF93DF93EC0161E08E810E94D51289
|
||||
:100B20006AEF70E080E090E00E9457140E941B146E
|
||||
:100B300009851A852B853C85601771078207930705
|
||||
:100B400020F419861A861B861C862D85211111C05A
|
||||
:100B500009851A852B853C85DC01CB01801B910B17
|
||||
:100B6000A20BB30B803D9740A105B10510F481E0C5
|
||||
:100B700073C01D860E941B1469877A878B879C87A8
|
||||
:100B80001C821B821A821982188261E08E810E9467
|
||||
:100B90009D1260E08E810E94D51264E170E080E0D9
|
||||
:100BA00090E00E945714F89461E08E810E94D51263
|
||||
:100BB00088E290E00E947D1460E08E810E949D1288
|
||||
:100BC000F12CD12C81E009C0E39481E090E00E94F7
|
||||
:100BD0007D148FEFE81204C009C0E12C082F10E04B
|
||||
:100BE0008E810E940C138017910771F38E810E94F1
|
||||
:100BF0000C139FEFE916C9F023E02F1590F4F0FCD9
|
||||
:100C000010C09D2D969596959695FE01E90FF11DC4
|
||||
:100C10009081990F908328852E1510F49160908310
|
||||
:100C2000D394F39495E5F912D8CF789427E22D1553
|
||||
:100C300090F42C8130E04881898190E0840F911DEF
|
||||
:100C40004A81840F911D4B81840F911D992728178C
|
||||
:100C5000390709F48CCF80E0DF91CF911F910F917C
|
||||
:100C6000FF90EF90DF900895EF92FF920F931F9304
|
||||
:100C7000CF93DF93EC010E948405882391F18F814B
|
||||
:100C80008B3029F070F18551823058F507C06881AA
|
||||
:100C900070E080E090E00E94E1172DC0688170E074
|
||||
:100CA00080E090E00E94E11720E030E040E853E46B
|
||||
:100CB0000E946F187B018C01698170E080E090E0F8
|
||||
:100CC0000E94E3179B01AC016E2D7F2D802F912F89
|
||||
:100CD0000E94151720E030E040E251E40E947917AD
|
||||
:100CE0000AC06FE171E084EB92E00E94F71460E0CB
|
||||
:100CF00070E080EC9FE7DF91CF911F910F91FF9003
|
||||
:100D0000EF900895CF92DF92EF92FF920F931F938F
|
||||
:100D1000CF93DF938C01C62F0E948405882309F4AA
|
||||
:100D200077C0F80187818B3039F008F471C08551A4
|
||||
:100D3000823008F06DC01DC0F801628170E080E073
|
||||
:100D400090E00E94E117B62FA72FF82FE92F462F2A
|
||||
:100D5000572F682F792FCB01BA01CC2309F462C039
|
||||
:100D600020E030E040E151E46B2F7A2F8F2F9E2F4F
|
||||
:100D700037C0F801D2816D2F6F7770E080E090E08E
|
||||
:100D80000E94E31720E030E040E853E40E946F182F
|
||||
:100D90006B017C01F801638170E080E090E00E94CB
|
||||
:100DA000E3179B01AC016C2D7D2D8E2D9F2D0E9494
|
||||
:100DB000151720E030E040E251E40E947917472FF8
|
||||
:100DC000382F292F862F942FA32FB22FBC01CD01AE
|
||||
:100DD000D7FD9058CC2331F120E030E040E151E4E0
|
||||
:100DE0000E946F1820E030E040EA50E40E9479173A
|
||||
:100DF00020E030E040E052E40E941517472F382FE2
|
||||
:100E0000292F862F942FA32FB22FBC01CD010AC00A
|
||||
:100E10006FE171E084EB92E00E94F71460E070E013
|
||||
:100E200080EC9FE7DF91CF911F910F91FF90EF90A2
|
||||
:100E3000DF90CF900895CF93DF9322C087EE91E0AB
|
||||
:100E40000E94AA0E049741F4109269011092680161
|
||||
:100E500010926B0110926A01C0916A01D0916B01EE
|
||||
:100E600087EE91E00E94B30EFE01EE0FFF1FE459E2
|
||||
:100E7000FE4F918380832196D0936B01C0936A01CA
|
||||
:100E800087EE91E00E94AA0E892BC1F6DF91CF91E7
|
||||
:100E9000089580916C0190916D01019731F46091FA
|
||||
:100EA000670187EE91E00E94350F80916C0190916F
|
||||
:100EB0006D018330910529F08730910511F0C897B5
|
||||
:100EC00041F443E050E06EE571E087EE91E00E946E
|
||||
:100ED000070F80916C0190916D018830910511F0A0
|
||||
:100EE000449741F444E050E06EE571E087EE91E014
|
||||
:100EF0000E94070F80916C0190916D018E319105D8
|
||||
:100F000011F0889741F449E050E06EE571E087EE1A
|
||||
:100F100091E00C94070F089540E855E260E070E01E
|
||||
:100F200084EB92E00E944A1667E070E087EE91E061
|
||||
:100F30000E94920F6BE177E087EE91E00E94C60F6E
|
||||
:100F400069E477E087EE91E00E94CB0F69E271E0FF
|
||||
:100F500084EB92E00C941615AF92BF92CF92DF9281
|
||||
:100F6000EF92FF920F931F93CF93DF93CDB7DEB72E
|
||||
:100F70002C970FB6F894DEBF0FBECDBF80916A01EB
|
||||
:100F800090916B01049709F0D4C68091680190910B
|
||||
:100F90006901892B09F0CDC681E090E09093690149
|
||||
:100FA0008093680180916C0190916D01019731F4FB
|
||||
:100FB00080916E010E940C138093670180916C01F7
|
||||
:100FC00090916D01029731F46091700180916E01F2
|
||||
:100FD0000E94D51280916C0190916D010397A9F444
|
||||
:100FE00080916E010E94F11190935D0180935C01EC
|
||||
:100FF0009C0197FF02C021503F4F30935F0160E09A
|
||||
:1010000071E00E94DD188093600180916C019091E5
|
||||
:101010006D01049741F460917001709171018091AC
|
||||
:101020006E010E94121280916C0190916D010597E2
|
||||
:1010300031F46091700180916E010E949D12809147
|
||||
:101040006C0190916D01079709F042C080916E018B
|
||||
:1010500090916F01809352019093530161E00E943F
|
||||
:101060009D1260E0809152010E94D51282E090E0D2
|
||||
:101070000E947D1461E0809152010E94D51285E0AA
|
||||
:1010800090E00E947D1460E0809152010E94D51290
|
||||
:1010900060E0809152010E949D1220E432E44FE012
|
||||
:1010A00050E061E0809152010E9435132AE330E064
|
||||
:1010B00040E050E00E941319CA01B90120E031E07C
|
||||
:1010C00040E050E00E94131920935F01609360019B
|
||||
:1010D00080916C0190916D018830910539F481E027
|
||||
:1010E00080935F0182E08093600121C0449709F5FD
|
||||
:1010F00080915B01811107C086EE91E00E94AE04F1
|
||||
:1011000081E080935B0129E531E048E551E067E546
|
||||
:1011100071E086EE91E00E94BE04809157018093B9
|
||||
:101120005F01809158018093600180915901809303
|
||||
:10113000610180916C0190916D014E9769F58091EC
|
||||
:101140005A01811107C08EED91E00E948C0181E06F
|
||||
:1011500080935A018EED91E00E9490018091E00110
|
||||
:1011600080935F018091DF01809360018091DE01B7
|
||||
:10117000809361018091E301809362018091E2019B
|
||||
:10118000809363019091E4019093640180936501E1
|
||||
:101190008091E1018093660180916C0190916D01D5
|
||||
:1011A000889709F059C08091700190917101009762
|
||||
:1011B00019F426E04BE005C08130910549F426E0A2
|
||||
:1011C00046E160916E0180ED91E00E946D0508C0DE
|
||||
:1011D0008230910519F426E045E1F3CF0397D9F366
|
||||
:1011E00060E080ED91E00E94820669877A878B87B4
|
||||
:1011F0009C8780ED91E00E9434066D837E838F830F
|
||||
:1012000098871092510110925001FE01399680E0AA
|
||||
:1012100090E001962191DC01A25ABE4F2C938430BC
|
||||
:101220009105BCF384E090E09093510180935001CC
|
||||
:101230000196DC01A25ABE4FE5E0F0E0EC0FFD1F85
|
||||
:10124000E80FF91F359720812C938830910584F39E
|
||||
:10125000909351018093500180916C0190916D01A8
|
||||
:10126000C297D9F480916E0190916F01482F21E0CF
|
||||
:101270006091700170917101672B09F420E0642F77
|
||||
:101280006F5FFC01329737E03E9FC0013F9F900D9A
|
||||
:1012900011248A559E4F0E94160280916C019091F4
|
||||
:1012A0006D01C39791F420916E0130916F0122502E
|
||||
:1012B000310947E0429FC001439F900D11248A5598
|
||||
:1012C0009E4F0E94080381116AC380916C01909126
|
||||
:1012D0006D01C49791F420916E0130916F012250FD
|
||||
:1012E000310917E0129FC001139F900D11248A55F8
|
||||
:1012F0009E4F0E94080381116BC380916C019091F5
|
||||
:101300006D01C59791F420916E0130916F012250CB
|
||||
:10131000310947E0429FC001439F900D11248A5537
|
||||
:101320009E4F0E940803811165C380916C019091CA
|
||||
:101330006D01C69791F420916E0130916F0122509A
|
||||
:10134000310917E0129FC001139F900D11248A5597
|
||||
:101350009E4F0E940803811168C380916C01909197
|
||||
:101360006D01C79791F420916E0130916F01225069
|
||||
:10137000310917E0129FC001139F900D11248A5567
|
||||
:101380009E4F0E940803811162C380916C0190916D
|
||||
:101390006D01C89791F420916E0130916F01225038
|
||||
:1013A000310917E0129FC001139F900D11248A5537
|
||||
:1013B0009E4F0E940803811163C380916C0190913C
|
||||
:1013C0006D018634910591F460916E0170916F0109
|
||||
:1013D000462F4F5F9B0122503109C901880F991F89
|
||||
:1013E000820F931F8C569E4F0E94100380916C01B8
|
||||
:1013F00090916D018734910589F420916E013091AF
|
||||
:101400006F0122503109C901880F991F820F931F64
|
||||
:101410008C569E4F0E947A04811146C380916C01C4
|
||||
:1014200090916D018834910589F420916E0130917D
|
||||
:101430006F0122503109C901880F991F820F931F34
|
||||
:101440008C569E4F0E947A04811140C380916C019A
|
||||
:1014500090916D018934910589F420916E0130914C
|
||||
:101460006F0122503109C901880F991F820F931F04
|
||||
:101470008C569E4F0E947A04811145C380916C0165
|
||||
:1014800090916D018A34910589F420916E0130911B
|
||||
:101490006F0122503109C901880F991F820F931FD4
|
||||
:1014A0008C569E4F0E947A0481114AC380916C0130
|
||||
:1014B00090916D018B34910589F420916E013091EA
|
||||
:1014C0006F0122503109C901880F991F820F931FA4
|
||||
:1014D0008C569E4F0E947A0481115AC380916C01F0
|
||||
:1014E00090916D018C34910589F420916E013091B9
|
||||
:1014F0006F0122503109C901880F991F820F931F74
|
||||
:101500008C569E4F0E947A0481115BC380916C01BE
|
||||
:1015100090916D018D349105A9F520916E01309166
|
||||
:101520006F0122503109C901880F991F820F931F43
|
||||
:101530008C569E4F0E947A048111BBC323C0812F19
|
||||
:101540000E94F111BC0120916E0130916F01225077
|
||||
:101550003109C901880F991F820F931FE12C00E008
|
||||
:1015600024E040E08C569E4F0E94F8036AEF70E042
|
||||
:1015700080E090E00E9457142FEFC21AD20ACA14DA
|
||||
:10158000DB04ECF280916C0190916D018E34910539
|
||||
:1015900089F420916E0130916F0122503109C90107
|
||||
:1015A000880F991F820F931F8C569E4F0E947A04BA
|
||||
:1015B00081118CC380916C0190916D018F349105E4
|
||||
:1015C00089F420916E0130916F0122503109C901D7
|
||||
:1015D000880F991F820F931F8C569E4F0E947A048A
|
||||
:1015E00081118EC380916C0190916D018A359105B6
|
||||
:1015F00069F480916E018093540180917001809311
|
||||
:101600005501809172018093560118C08B35910568
|
||||
:10161000A9F460916E0170916F01462F4F5F9B019D
|
||||
:101620002250310955E0529FC001539F900D112463
|
||||
:10163000209170018A589E4F0E945C0180916C013C
|
||||
:1016400090916D018C35910549F080916C019091DC
|
||||
:101650006D018D35910509F0BDC048C060916E01E6
|
||||
:1016600070916F01462F4F5F9B012250310955E069
|
||||
:10167000529FC001539F900D1124209170018A58F0
|
||||
:101680009E4F0E945C01009172011091730102FB58
|
||||
:10169000DD24D0F8D19401FBCC24C0F8C1940170B2
|
||||
:1016A0001127102F1195E12CF12CA5E0BA2E16C0B0
|
||||
:1016B00060916E0170916F0162507109B69EC00118
|
||||
:1016C000B79E900D1124012F2C2D4D2D6E2D8A5873
|
||||
:1016D0009E4F0E94EF003FEFE31AF30A80917001E2
|
||||
:1016E00090917101E816F9061CF3AFCF20917001BB
|
||||
:1016F0003091710180916E0190916F01232BB1F4B3
|
||||
:101700009C012250310945E0429FC001439F900D4A
|
||||
:10171000112400915601209155014091540160918E
|
||||
:1017200072018A589E4F0E94EF0054C09C012250C3
|
||||
:10173000310945E0429FC001439F900D11248A5812
|
||||
:101740009E4F0E948901E12CF12CC82ED12C15E06E
|
||||
:101750003DC020917001309171012130310541F47B
|
||||
:101760008091720190917301E816F906B1F42BC0D3
|
||||
:101770002230310541F480917201909173018E15F0
|
||||
:101780009F055CF420C023303105E9F4809172019B
|
||||
:1017900090917301E816F906B4F020916E01309132
|
||||
:1017A0006F0122503109129FC001139F900D112427
|
||||
:1017B0000091560120915501409154016E2D8A5897
|
||||
:1017C0009E4F0E94EF008FEFE81AF80AEC14FD0418
|
||||
:1017D0000CF4BFCF80916C0190916D018E35910515
|
||||
:1017E00049F080916C0190916D018F35910509F060
|
||||
:1017F000A0C252C08091720190917301181619060F
|
||||
:1018000034F081E090E09093730180937201209115
|
||||
:101810006E0130916F012250310945E0429FC001B5
|
||||
:10182000439F900D11248A589E4F0E948901E09099
|
||||
:101830007001F0907101C82ED12C15E029C0809163
|
||||
:101840007001909171019701281B390BC9016091BA
|
||||
:101850007201709173010E94DD18892BB1F42091FF
|
||||
:101860006E0130916F0122503109129FC001139F08
|
||||
:10187000900D112400915601209155014091540181
|
||||
:101880006E2D8A589E4F0E94EF003FEFE31AF30A35
|
||||
:10189000EC14FD04A4F2A5CF20916E0130916F01EC
|
||||
:1018A0002250310945E0429FC001439F900D112411
|
||||
:1018B0008A589E4F0E9489012091720130917301D4
|
||||
:1018C000232B59F133C080917001909171012091C7
|
||||
:1018D0006E0130916F0122503109E816F90664F467
|
||||
:1018E000129FC001139F900D112400915601209169
|
||||
:1018F00055014091540108C0129FC001139F900DE3
|
||||
:10190000112400E020E040E06E2D8A589E4F0E9496
|
||||
:10191000EF008FEFE81AF80A05C0E12CF12CC82E71
|
||||
:10192000D12C15E0EC14FD0474F203C2C82ED12CA6
|
||||
:10193000760115E030C0809170019091710196019F
|
||||
:10194000281B390B80916E0190916F01E216F3060E
|
||||
:101950007CF09C0122503109129FC001139F900D11
|
||||
:1019600011240091560120915501409154010BC062
|
||||
:101970009C0122503109129FC001139F900D112428
|
||||
:1019800000E020E040E06E2D8A589E4F0E94EF005C
|
||||
:1019900021E0E21AF108E114F10469F6CAC161E03C
|
||||
:1019A0008091700190917101892B09F460E0209180
|
||||
:1019B0006E0130916F012250310947E0429FC00112
|
||||
:1019C000439F900D11248A559E4F0E94FE027DCCAC
|
||||
:1019D00020916E0130916F0122503109129FC00198
|
||||
:1019E000139F900D1124609170018A559E4F0E94A3
|
||||
:1019F000EC0283CC41E08091720190917301892BBC
|
||||
:101A000009F440E020916E0130916F0122503109BC
|
||||
:101A100057E0529FC001539F900D112460917001B7
|
||||
:101A20008A559E4F0E94CB0280CC20916E0130914E
|
||||
:101A30006F0122503109129FC001139F900D112494
|
||||
:101A4000609170018A559E4F0E94B20286CC90919F
|
||||
:101A5000720180E0609170017091710168277927AF
|
||||
:101A600020916E0130916F0122503109129FC00107
|
||||
:101A7000139F900D11248A559E4F0E94690285CCB8
|
||||
:101A800020916E0130916F0122503109129FC001E7
|
||||
:101A9000139F900D11248A559E4F0E94040380933A
|
||||
:101AA0005F019093600189CC20916E0130916F01AC
|
||||
:101AB00022503109C901880F991F820F931F60912D
|
||||
:101AC00070018C569E4F0E942703A8CC9091720102
|
||||
:101AD00080E06091700170917101682779272091F1
|
||||
:101AE0006E0130916F0122503109C901880F991F91
|
||||
:101AF000820F931FE12C00E024E040E08C569E4FC3
|
||||
:101B00000E94F803A3CC9091720180E06091700173
|
||||
:101B1000709171016827792720916E0130916F01D2
|
||||
:101B200022503109C901880F991F820F931FE12CA0
|
||||
:101B300000E024E041E08C569E4F0E94F8039ECCCA
|
||||
:101B400020916E0130916F0122503109C901880F37
|
||||
:101B5000991F820F931F609172018C569E4F0E94B5
|
||||
:101B60007304898320916E0130916F0122503109F5
|
||||
:101B7000C901880F991F820F931F2091700141E0C6
|
||||
:101B8000BE016F5F7F4F8C569E4F0E94AE038ECC7E
|
||||
:101B900080917201898320916E0130916F012250F2
|
||||
:101BA0003109C901880F991F820F931F209170017D
|
||||
:101BB00041E0BE016F5F7F4F8C569E4F0E94AE0387
|
||||
:101BC0008DCC80917001909171010AE010E0B80114
|
||||
:101BD0000E94DD1820916E0130916F012250310971
|
||||
:101BE000C901880F991F820F931F8C569E4F0E9428
|
||||
:101BF000730489838091700190917101B8010E94F2
|
||||
:101C0000DD1820916E0130916F0122503109A90138
|
||||
:101C1000440F551F420F531F682FCA018C569E4F09
|
||||
:101C20000E94730480688A8380917201909173018D
|
||||
:101C3000B8010E94DD1820916E0130916F01225091
|
||||
:101C40003109C901880F991F820F931F8C569E4F2F
|
||||
:101C50000E9473048B838091720190917301B8018B
|
||||
:101C60000E94DD1820916E0130916F0122503109E0
|
||||
:101C7000A901440F551F420F531F682FCA018C56EC
|
||||
:101C80009E4F0E9473048C8320916E0130916F01EE
|
||||
:101C900022503109C901880F991F820F931F20E03C
|
||||
:101CA00044E0BE016F5F7F4F8C569E4F0E94AE0393
|
||||
:101CB0002DCC10917001A0907201B0907301AA0C0C
|
||||
:101CC000BB1CAA0CBB1CC12CD12C59CC8FEF898317
|
||||
:101CD0008A838B838C8320916E0130916F01225017
|
||||
:101CE0003109C901880F991F820F931F20E044E03A
|
||||
:101CF000BE016F5F7F4F8C569E4F0E94AE035ACC41
|
||||
:101D000019821A821B821C8220916E0130916F0110
|
||||
:101D100022503109C901880F991F820F931F20E0BB
|
||||
:101D200044E0BE016F5F7F4F8C569E4F0E94AE0312
|
||||
:101D300059CC2C960FB6F894DEBF0FBECDBFDF9105
|
||||
:101D4000CF911F910F91FF90EF90DF90CF90BF90B8
|
||||
:101D5000AF90089520911B0230E080911C02281B57
|
||||
:101D60003109C901089580911C0290911B028917C5
|
||||
:101D700050F4E82FF0E0E35EFD4F208130E08F5F0C
|
||||
:101D800080931C0202C02FEF3FEFC9010895E0913C
|
||||
:101D90001C0280911B02E81730F4F0E0E35EFD4F77
|
||||
:101DA000208130E002C02FEF3FEFC9010895089570
|
||||
:101DB000E091F301F091F4013097E1F030911C02D1
|
||||
:101DC00020911B023217B0F040E009C0DC01A20FE5
|
||||
:101DD000B31F5C91D901A35EBD4F5C934F5F242F6D
|
||||
:101DE00030E02617370794F310921C0260931B0211
|
||||
:101DF000CB0109940895E091F501F091F601309737
|
||||
:101E000029F01092F9011092F80109940895CF92E7
|
||||
:101E1000DF92EF92FF920F931F93CF93DF937C019A
|
||||
:101E2000CB018A012091F701222391F0EB016B0194
|
||||
:101E3000C40ED51E09C06991D701ED91FC910190A6
|
||||
:101E4000F081E02DC7010995CC15DD05A1F703C090
|
||||
:101E5000642F0E948E10C801DF91CF911F910F91C6
|
||||
:101E6000FF90EF90DF90CF900895CF93DF931F9274
|
||||
:101E7000CDB7DEB769832091F7012223D1F02091FD
|
||||
:101E8000F801203240F021E030E0FC01338322836E
|
||||
:101E900020E030E015C08091F901E82FF0E0E65035
|
||||
:101EA000FE4F998190838F5F8093F9018093F801B1
|
||||
:101EB00005C061E0CE0101960E948E1021E030E065
|
||||
:101EC000C9010F90DF91CF910895FC011382128216
|
||||
:101ED00048EE53E060E070E0448355836683778387
|
||||
:101EE00084E391E091838083089510921C02109204
|
||||
:101EF0001B021092F9011092F8010C94D40FCF93A9
|
||||
:101F0000DF93EC01862F0E94F20F8BEF9EE00E9480
|
||||
:101F1000AC1088ED9EE00E94A710CE01DF91CF911A
|
||||
:101F20000C94750F0C947F0F862F413208F040E21D
|
||||
:101F30006DE172E00E94F60F10921C0280931B026A
|
||||
:101F4000089521E00C94940F81E08093F701609351
|
||||
:101F50001A021092F9011092F80108950C94A40F3E
|
||||
:101F60000F93062F21E04091F8016AEF71E0809114
|
||||
:101F70001A020E943B101092F9011092F80110927F
|
||||
:101F8000F7010F91089561E00C94B00F7093F40184
|
||||
:101F90006093F30108957093F6016093F50108953D
|
||||
:101FA00087EE91E00C94650F1092460281E08093D9
|
||||
:101FB00044021092430261E082E10E94D51261E086
|
||||
:101FC00083E10E94D512E9EBF0E080818E7F80836F
|
||||
:101FD00080818D7F808382E08093B80085E4809348
|
||||
:101FE000BC000895880F8093BA000895413208F02C
|
||||
:101FF0003FC0909146029111FCCF91E09093460230
|
||||
:10200000209344022FEF20933D0210924202242F8E
|
||||
:102010002150209341029093450290914502880FF0
|
||||
:10202000892B8093450280914302813041F41092C4
|
||||
:102030004302809145028093BB0085EC01C085EE90
|
||||
:102040008093BC00809146028130E1F3809142028E
|
||||
:10205000841710F44091420227E432E0FB01D901D9
|
||||
:1020600002C08D9181938A2F821B8417D0F301C007
|
||||
:1020700040E0842F08950F93413208F046C09091BC
|
||||
:1020800046029111FCCF92E09093460200934402E5
|
||||
:102090009FEF90933D021092420240934102FB0158
|
||||
:1020A00067E472E0DB0102C091919D939A2F961B29
|
||||
:1020B0009417D0F31092450290914502880F892B16
|
||||
:1020C0008093450280914302813041F41092430293
|
||||
:1020D000809145028093BB0085EC01C085EE809322
|
||||
:1020E000BC00222321F0809146028230E1F38091EE
|
||||
:1020F0003D028F3F61F080913D02803251F080912E
|
||||
:102100003D02803341F483E007C081E005C080E0F8
|
||||
:1021100003C082E001C084E00F910895613298F419
|
||||
:1021200020914602243089F460933F02FC0187E647
|
||||
:1021300092E0DC0102C021912D932A2F281B261743
|
||||
:10214000D0F380E0089581E0089582E008959093AF
|
||||
:10215000880280938702089590938A02809389026F
|
||||
:10216000089585ED8093BC008091BC0084FDFCCF78
|
||||
:1021700010924602089585EC8093BC0010924602AE
|
||||
:1021800008951F920F920FB60F9211242F933F9331
|
||||
:102190004F935F936F937F938F939F93AF93BF936F
|
||||
:1021A000EF93FF938091B900887F803609F49FC038
|
||||
:1021B00058F5883209F45BC090F4803109F452C0BC
|
||||
:1021C00038F4882309F4F8C0883009F0F9C04AC00F
|
||||
:1021D000883109F44CC0803209F0F2C05CC0803410
|
||||
:1021E00009F46BC038F4803309F455C0883309F022
|
||||
:1021F000E7C054C0803509F454C0883509F462C082
|
||||
:10220000883409F0DDC0DAC0883909F4CBC0A8F4FD
|
||||
:10221000883709F46CC038F4883609F468C0803710
|
||||
:1022200009F0CEC064C0883809F4BCC0803909F414
|
||||
:1022300064C0803809F0C4C060C0803B09F48AC023
|
||||
:1022400038F4803A09F46BC0883A09F0B9C082C00A
|
||||
:10225000803C09F4ABC0883C09F4A8C0883B09F075
|
||||
:10226000AFC08DC0809145028093BB0012C0909199
|
||||
:10227000420280914102981788F580914202E82F2E
|
||||
:10228000F0E0E95BFD4F90819093BB008F5F8093FE
|
||||
:10229000420285EC88C080933D0290C080933D024D
|
||||
:1022A00056C0809142029091BB00E82FF0E0E95BBC
|
||||
:1022B000FD4F90838F5F8093420290914202809104
|
||||
:1022C00041026DC0809142029091BB00E82FF0E086
|
||||
:1022D000E95BFD4F90838F5F8093420280914402BF
|
||||
:1022E00081116CC081E08093430284EA60C083E086
|
||||
:1022F0008093460210923E02CCCF80913E02803203
|
||||
:1023000008F050C080913E029091BB00E82FF0E0B1
|
||||
:10231000E557FD4F90838F5F80933E02BACF809147
|
||||
:102320003E02803230F4E0913E02F0E0E557FD4F8E
|
||||
:1023300010820E94B11060913E02E0918702F091FC
|
||||
:10234000880270E08BE892E0099510923E020E94AC
|
||||
:10235000BB1036C084E08093460210924002109277
|
||||
:102360003F02E0918902F0918A02099580913F0233
|
||||
:10237000811105C081E080933F0210926702809135
|
||||
:102380004002E82FF0E0E959FD4F90819093BB00A7
|
||||
:102390008F5F809340029091400280913F02981796
|
||||
:1023A00008F477CF85E88093BC000AC085EC809361
|
||||
:1023B000BC001092460204C010923D020E94B1106F
|
||||
:1023C000FF91EF91BF91AF919F918F917F916F910D
|
||||
:1023D0005F914F913F912F910F900FBE0F901F90E3
|
||||
:1023E00018958E3008F08E5087702091060140E4D9
|
||||
:1023F000249F90011124822B80937C0080917A008D
|
||||
:10240000806480937A0080917A0086FDFCCF2091D1
|
||||
:10241000780030917900932F80E0AC01422B9A0133
|
||||
:10242000C90108951F93CF93DF93182FEB0161E04B
|
||||
:102430000E949D12209711F460E004C0CF3FD105A7
|
||||
:1024400039F461E0812FDF91CF911F910C94D51267
|
||||
:10245000E12FF0E0E859FF4FE491E330B9F028F4C0
|
||||
:10246000E13051F0E230B1F50CC0E63019F1E7305F
|
||||
:1024700049F1E43079F514C084B5806884BDC7BDE6
|
||||
:102480002EC084B5806284BDC8BD29C08091800003
|
||||
:10249000806880938000D0938900C09388001FC01B
|
||||
:1024A00080918000806280938000D0938B00C093E5
|
||||
:1024B0008A0015C08091B00080688093B000C093FE
|
||||
:1024C000B3000DC08091B00080628093B000C093D3
|
||||
:1024D000B40005C0C038D1050CF0B3CFADCFDF914B
|
||||
:1024E000CF911F910895833069F028F48130A1F0D5
|
||||
:1024F000823011F514C08630B1F08730C1F08430DD
|
||||
:10250000D9F404C0809180008F7703C0809180004F
|
||||
:102510008F7D80938000089584B58F7702C084B545
|
||||
:102520008F7D84BD08958091B0008F7703C0809126
|
||||
:10253000B0008F7D8093B0000895CF93DF9390E03B
|
||||
:10254000FC01E458FF4F4491FC01E057FF4F849198
|
||||
:10255000882341F190E0880F991FFC01E854FF4F58
|
||||
:1025600025913491D90182559F4FFC018591949119
|
||||
:10257000C82FD92F9FB7F8948C91611106C0409550
|
||||
:1025800084238C938881842308C0623041F4242FF3
|
||||
:10259000209582238C938881842B888302C0842B8E
|
||||
:1025A0008C939FBFDF91CF9108950F931F93CF938B
|
||||
:1025B000DF931F92CDB7DEB7282F30E0F901E8593D
|
||||
:1025C000FF4F8491F901E458FF4F1491F901E0574E
|
||||
:1025D000FF4F04910023D1F0882321F069830E94EA
|
||||
:1025E00073126981E02FF0E0EE0FFF1FE255FF4FFD
|
||||
:1025F00085919491DC019FB7F8948C91611103C08F
|
||||
:102600001095812301C0812B8C939FBF0F90DF9188
|
||||
:10261000CF911F910F910895CF93DF93282F30E032
|
||||
:10262000F901E859FF4F8491F901E458FF4FD49123
|
||||
:10263000F901E057FF4FC491CC2389F081110E942A
|
||||
:102640007312EC2FF0E0EE0FFF1FEC55FF4F85915A
|
||||
:102650009491DC018C918D2321E030E011F420E095
|
||||
:1026600030E0C901DF91CF9108958F929F92AF9290
|
||||
:10267000BF92CF92DF92EF92FF920F931F93CF936F
|
||||
:10268000DF9390E0FC01E458FF4FD491FC01E05748
|
||||
:10269000FF4F7491611102C0C0E001C0CD2FDA017B
|
||||
:1026A000C901880F991FAA1FBB1F54E0B695A795B3
|
||||
:1026B000979587955A95D1F7672F70E0660F771F2A
|
||||
:1026C0006C557F4F812C912C5401FB010591149185
|
||||
:1026D00010C0C12CD12C7601C394C80CD91CEA1CA3
|
||||
:1026E000FB1C88169906AA06BB0609F448C04601D9
|
||||
:1026F0005701F801E081ED23EC1759F310C0C12C0C
|
||||
:10270000D12C7601C394C80CD91CEA1CFB1C88167A
|
||||
:102710009906AA06BB0699F14601570103C0FB01C1
|
||||
:1027200005911491F801E081ED23EC13E8CF8819AD
|
||||
:102730009909AA09BB0920E030E0A901FB016591D4
|
||||
:10274000749109C0281739074A075B07C1F02F5F4A
|
||||
:102750003F4F4F4F5F4FFB01E081ED23EC1791F3AB
|
||||
:10276000A5E1B0E00E94D2188B019C01005F1F4FD1
|
||||
:102770002F4F3F4F369527951795079503C000E0DB
|
||||
:1027800010E09801B801C901DF91CF911F910F911D
|
||||
:10279000FF90EF90DF90CF90BF90AF909F908F9081
|
||||
:1027A00008951F920F920FB60F9211242F933F930B
|
||||
:1027B0008F939F93AF93BF938091AB029091AC02A4
|
||||
:1027C000A091AD02B091AE023091B302232F285EEA
|
||||
:1027D0002D3720F40896A11DB11D05C0232F2556C5
|
||||
:1027E0000996A11DB11D2093B3028093AB02909373
|
||||
:1027F000AC02A093AD02B093AE028091AF02909173
|
||||
:10280000B002A091B102B091B2020196A11DB11D1A
|
||||
:102810008093AF029093B002A093B102B093B20242
|
||||
:10282000BF91AF919F918F913F912F910F900FBECC
|
||||
:102830000F901F9018950F931F938FB7F8940091E6
|
||||
:10284000AB021091AC022091AD023091AE028FBF6D
|
||||
:10285000B801C9011F910F9108950F931F939FB75E
|
||||
:10286000F8940091AF021091B0022091B102309122
|
||||
:10287000B20286B5A89B06C08F3F21F00F5F1F4FA5
|
||||
:102880002F4F3F4F9FBF322F212F102F0027080FB0
|
||||
:10289000111D211D311D45E0000F111F221F331F87
|
||||
:1028A0004A95D1F7B801C9011F910F910895CF92B0
|
||||
:1028B000DF92EF92FF92CF93DF936B017C010E9436
|
||||
:1028C0002D14EB010EC00E942D146C1B7D0B683E75
|
||||
:1028D000734038F081E0C81AD108E108F108C85106
|
||||
:1028E000DC4FC114D104E104F10469F7DF91CF9109
|
||||
:1028F000FF90EF90DF90CF900895019739F0019706
|
||||
:1029000029F0880F991F01970197F1F7089578949E
|
||||
:1029100084B5826084BD84B5816084BD85B58260E4
|
||||
:1029200085BD85B5816085BDEEE6F0E08081816082
|
||||
:102930008083E1E8F0E01082808182608083E0E8BB
|
||||
:10294000F0E0808181608083E1EBF0E08081846051
|
||||
:102950008083E0EBF0E0808181608083EAE7F0E053
|
||||
:1029600080818460808380818260808380818160B7
|
||||
:1029700080838081806880831092C1000895CF9207
|
||||
:10298000DF92EF92FF920F931F93CF93DF936C012F
|
||||
:10299000EB017A01E60EF71E00E010E00BC0699132
|
||||
:1029A000D601ED91FC910190F081E02DC6010995D1
|
||||
:1029B000080F191FCE15DF0591F7C801DF91CF91E0
|
||||
:1029C0001F910F91FF90EF90DF90CF900895DB0162
|
||||
:1029D0000D900020E9F7AD0141505109461B570BFE
|
||||
:1029E000DC01ED91FC910280F381E02D09940C94BF
|
||||
:1029F000E714DC01ED91FC910190F081E02D099448
|
||||
:102A00000F931F93CF93DF93EC016DE00E94F914B5
|
||||
:102A10008C016AE0CE010E94F9149C01200F311F45
|
||||
:102A2000C901DF91CF911F910F9108950F931F93CB
|
||||
:102A3000CF93DF93EC010E94E7148C01CE010E943A
|
||||
:102A400000159801280F391FC901DF91CF911F91FF
|
||||
:102A50000F9108950E9487140E948C07C6E0D6E16A
|
||||
:102A60000E94AC072097E1F30E940616F9CFFC0103
|
||||
:102A700084859585FC01E05CFF4F20813181FC015C
|
||||
:102A8000EE5BFF4F80819181281B390B2F73332719
|
||||
:102A9000C9010895FC0184859585FC01E05CFF4F28
|
||||
:102AA00040815181FC01EE5BFF4F20813181421753
|
||||
:102AB000530741F00190F081E02DE80FF91F2081CC
|
||||
:102AC00030E002C02FEF3FEFC9010895FC0184857B
|
||||
:102AD0009585FC01E05CFF4F40815181FC01EE5B7C
|
||||
:102AE000FF4F208131814217530781F0A081B181CE
|
||||
:102AF000A80FB91F8C91208131812F5F3F4F2F7319
|
||||
:102B0000332731832083282F30E002C02FEF3FEF9F
|
||||
:102B1000C9010895FC0186859785FC01E05CFF4FA3
|
||||
:102B2000DC01AE5BBF4F408151812D913C911197EB
|
||||
:102B300042175307C1F70895CF93DF93FC018685B1
|
||||
:102B40009785DC01A05CBF4F2D913C9111972F5FC1
|
||||
:102B50003F4F2F733327EC01CE5BDF4F4881598104
|
||||
:102B600024173507D9F30D90BC91A02DA80FB91FDC
|
||||
:102B70006C93A685B785A05CBF4F11963C932E93AE
|
||||
:102B8000A689B7892C9181E090E0058C02C0880F5E
|
||||
:102B9000991F0A94E2F7282B2C9381E090E0DF91B3
|
||||
:102BA000CF91089508951F920F920FB60F9211249E
|
||||
:102BB0002F933F934F938F939F93EF93FF93409166
|
||||
:102BC000C600809157039091580301968F739927FF
|
||||
:102BD0002091590330915A038217930759F0E091DD
|
||||
:102BE0005703F0915803E95EFC4F408390935803DC
|
||||
:102BF00080935703FF91EF919F918F914F913F9158
|
||||
:102C00002F910F900FBE0F901F90189584EB92E0BC
|
||||
:102C10000E943715892B11F00C94D21508951F923C
|
||||
:102C20000F920FB60F9211242F933F938F939F9380
|
||||
:102C3000EF93FF93209113033091140380911503B8
|
||||
:102C4000909116032817390731F48091C1008F7DC8
|
||||
:102C50008093C10014C0E0911503F0911603ED526A
|
||||
:102C6000FD4F2081809115039091160301968F737B
|
||||
:102C7000992790931603809315032093C600FF9124
|
||||
:102C8000EF919F918F913F912F910F900FBE0F90D9
|
||||
:102C90001F901895CF92DF92EF92FF92CF93DF9320
|
||||
:102CA000EC016A017B01EC89FD8981E090E00E8CEA
|
||||
:102CB00002C0880F991F0A94E2F7808360E271EAEC
|
||||
:102CC00087E090E0A70196010E94F1182150310998
|
||||
:102CD000410951095695479537952795211580E16A
|
||||
:102CE000380798F0EC89FD89108260E970ED83E087
|
||||
:102CF00090E0A70196010E94F11821503109410985
|
||||
:102D000051095695479537952795E889F989308374
|
||||
:102D1000EA89FB892083EE89FF89408181E090E088
|
||||
:102D20009C010A8C02C0220F331F0A94E2F7422B47
|
||||
:102D30004083EE89FF8940819C010B8C02C0220FE9
|
||||
:102D4000331F0A94E2F7422B4083EE89FF894081CA
|
||||
:102D50009C010C8C02C0220F331F0A94E2F7422B15
|
||||
:102D60004083EE89FF8920810D8C02C0880F991F56
|
||||
:102D70000A94E2F7809582238083DF91CF91FF90C0
|
||||
:102D8000EF90DF90CF9008951092B7021092B602A4
|
||||
:102D900088EE93E0A0E0B0E08093B8029093B9028F
|
||||
:102DA000A093BA02B093BB0284E491E09093B50281
|
||||
:102DB0008093B40287E193E09093C1028093C002B4
|
||||
:102DC00083ED92E09093C3028093C20285EC90E081
|
||||
:102DD0009093C5028093C40284EC90E09093C70264
|
||||
:102DE0008093C60280EC90E09093C9028093C80261
|
||||
:102DF00081EC90E09093CB028093CA0286EC90E045
|
||||
:102E00009093CD028093CC0284E08093CE0283E045
|
||||
:102E10008093CF0287E08093D00285E08093D10237
|
||||
:102E200081E08093D20208955058BB27AA270ED084
|
||||
:102E30001CC10DD130F012D120F031F49F3F11F4BC
|
||||
:102E40001EF402C10EF4E095E7FBF8C0E92F1ED195
|
||||
:102E500080F3BA17620773078407950718F071F4B7
|
||||
:102E60009EF536C10EF4E0950B2EBA2FA02D0B0166
|
||||
:102E7000B90190010C01CA01A0011124FF27591BBF
|
||||
:102E800099F0593F50F4503E68F11A16F040A22FC5
|
||||
:102E9000232F342F4427585FF3CF46953795279536
|
||||
:102EA000A795F0405395C9F77EF41F16BA0B620B35
|
||||
:102EB000730B840BBAF09150A1F0FF0FBB1F661F7C
|
||||
:102EC000771F881FC2F70EC0BA0F621F731F841FBF
|
||||
:102ED00048F4879577956795B795F7959E3F08F0E5
|
||||
:102EE000B3CF9395880F08F09927EE0F97958795A4
|
||||
:102EF00008950CD0BAC0B2D040F0A9D030F021F47F
|
||||
:102F00005F3F19F09BC05111E4C09EC0BFD098F341
|
||||
:102F10009923C9F35523B1F3951B550BBB27AA275A
|
||||
:102F200062177307840738F09F5F5F4F220F331FCC
|
||||
:102F3000441FAA1FA9F333D00E2E3AF0E0E830D098
|
||||
:102F400091505040E695001CCAF729D0FE2F27D09B
|
||||
:102F5000660F771F881FBB1F261737074807AB0769
|
||||
:102F6000B0E809F0BB0B802DBF01FF2793585F4FDE
|
||||
:102F70002AF09E3F510568F061C0ABC05F3FECF3A3
|
||||
:102F8000983EDCF3869577956795B795F7959F5FA3
|
||||
:102F9000C9F7880F911D9695879597F90895E1E0F7
|
||||
:102FA000660F771F881FBB1F621773078407BA0756
|
||||
:102FB00020F0621B730B840BBA0BEE1F88F7E095B1
|
||||
:102FC0000895E89409C097FB3EF49095809570951C
|
||||
:102FD00061957F4F8F4F9F4F9923A9F0F92F96E965
|
||||
:102FE000BB279395F695879577956795B795F111DA
|
||||
:102FF000F8CFFAF4BB0F11F460FF1BC06F5F7F4F77
|
||||
:103000008F4F9F4F16C0882311F096E911C0772388
|
||||
:1030100021F09EE8872F762F05C0662371F096E891
|
||||
:10302000862F70E060E02AF09A95660F771F881F60
|
||||
:10303000DAF7880F9695879597F9089597F99F671E
|
||||
:1030400080E870E060E008959FEF80EC0895002430
|
||||
:103050000A941616170618060906089500240A94FD
|
||||
:1030600012161306140605060895092E0394000C83
|
||||
:1030700011F4882352F0BB0F40F4BF2B11F460FF12
|
||||
:1030800004C06F5F7F4F8F4F9F4F089557FD90583B
|
||||
:10309000440F551F59F05F3F71F04795880F97FB1C
|
||||
:1030A000991F61F09F3F79F08795089512161306D6
|
||||
:1030B0001406551FF2CF4695F1DF08C01616170605
|
||||
:1030C0001806991FF1CF869571056105089408953A
|
||||
:1030D000E894BB2766277727CB0197F908950BD093
|
||||
:1030E000C4CFB5DF28F0BADF18F0952309F0A6CFDA
|
||||
:1030F000ABCF1124EECFCADFA0F3959FD1F3950F8C
|
||||
:1031000050E0551F629FF001729FBB27F00DB11D6B
|
||||
:10311000639FAA27F00DB11DAA1F649F6627B00DFB
|
||||
:10312000A11D661F829F2227B00DA11D621F739FE4
|
||||
:10313000B00DA11D621F839FA00D611D221F749FF2
|
||||
:103140003327A00D611D231F849F600D211D822F39
|
||||
:10315000762F6A2F11249F5750408AF0E1F0882380
|
||||
:103160004AF0EE0FFF1FBB1F661F771F881F91508D
|
||||
:103170005040A9F79E3F510570F060CFAACF5F3F46
|
||||
:10318000ECF3983EDCF3869577956795B795F795C0
|
||||
:10319000E7959F5FC1F7FE2B880F911D9695879548
|
||||
:1031A00097F908950E942F19A59F900DB49F900D37
|
||||
:1031B000A49F800D911D1124089597FB072E16F4EE
|
||||
:1031C000009407D077FD09D00E943B1907FC05D079
|
||||
:1031D0003EF4909581959F4F0895709561957F4F2E
|
||||
:1031E0000895A1E21A2EAA1BBB1BFD010DC0AA1F48
|
||||
:1031F000BB1FEE1FFF1FA217B307E407F50720F060
|
||||
:10320000A21BB30BE40BF50B661F771F881F991FDA
|
||||
:103210001A9469F760957095809590959B01AC0123
|
||||
:10322000BD01CF010895052E97FB16F4009407D039
|
||||
:1032300057FD0DD00E94F11807FC09D07EF490953F
|
||||
:103240008095709561957F4F8F4F9F4F0895509552
|
||||
:103250004095309521953F4F4F4F5F4F0895A29F66
|
||||
:10326000B001B39FC001A39F01D0B29F700D811D1B
|
||||
:103270001124911D0895AA1BBB1B51E107C0AA1F71
|
||||
:10328000BB1FA617B70710F0A61BB70B881F991F07
|
||||
:103290005A95A9F780959095BC01CD010895EE0F40
|
||||
:1032A000FF1F0590F491E02D09940F931F93CF9386
|
||||
:1032B000DF93689F8001699F100D789F100D112486
|
||||
:1032C000C8010E947319C82FD92F209731F0A80187
|
||||
:1032D00060E070E08C2F0E94AA1ACE01DF91CF919E
|
||||
:1032E0001F910F9108950F931F93CF93DF93823017
|
||||
:1032F000910510F482E090E0E0915D03F0915E03AF
|
||||
:1033000020E030E0C0E0D0E023C040815181481788
|
||||
:103310005907A8F04817590761F4828193812097D3
|
||||
:1033200019F09B838A832EC090935E0380935D0384
|
||||
:1033300029C02115310529F04217530710F0A901C2
|
||||
:1033400002C0BE01DF0102811381EF019A01F80181
|
||||
:103350003097D9F62115310509F1281B390B243096
|
||||
:10336000310590F412968D919C911397611571051A
|
||||
:1033700021F0FB019383828304C090935E038093CA
|
||||
:103380005D03FD01329644C0FD01E20FF31F8193FE
|
||||
:103390009193225031092D933C933AC020915B03C5
|
||||
:1033A00030915C03232B41F4209102013091030101
|
||||
:1033B00030935C0320935B03209100013091010165
|
||||
:1033C0002115310541F42DB73EB7409104015091CC
|
||||
:1033D0000501241B350BE0915B03F0915C03E217C0
|
||||
:1033E000F307A0F42E1B3F0B2817390778F0AC0128
|
||||
:1033F0004E5F5F4F2417350748F04E0F5F1F509305
|
||||
:103400005C0340935B038193919302C0E0E0F0E0A2
|
||||
:10341000CF01DF91CF911F910F910895EF92FF920D
|
||||
:103420000F931F93CF93DF93009709F48EC0DC01B5
|
||||
:10343000129713961C921E921297E0905D03F090E3
|
||||
:103440005E03E114F10489F42D913C911197280F4A
|
||||
:10345000391F80915B0390915C038217930789F574
|
||||
:10346000B0935C03A0935B0370C0E70120E030E001
|
||||
:1034700001C0EA01CA17DB0738F44A815B819E016B
|
||||
:1034800041155105B1F722C0AC0142505109FA0172
|
||||
:10349000D383C28300811181BC01600F711F6C173F
|
||||
:1034A0007D0761F468817981600F711F6E5F7F4FC6
|
||||
:1034B000718360836A817B81738362832115310507
|
||||
:1034C00029F4B0935E03A0935D033FC0F901B38379
|
||||
:1034D000A283E90149915991C40FD51FAC17BD07CB
|
||||
:1034E00071F4DC019E918E91840F951F0296918359
|
||||
:1034F000808312968D919C91139793838283A0E091
|
||||
:10350000B0E002C0D7017C01F7018281938100976E
|
||||
:10351000C9F7C701029620813181820F931F209144
|
||||
:103520005B0330915C032817390779F4109729F46D
|
||||
:1035300010925E0310925D0304C013961C921E92BB
|
||||
:103540001297F0925C03E0925B03CDB7DEB7E6E042
|
||||
:103550000C94BD1ADC0101C06D9341505040E0F75E
|
||||
:1035600008952A88398848885F846E847D848C8495
|
||||
:103570009B84AA84B984C884DF80EE80FD800C819E
|
||||
:103580001B81AA81B981CE0FD11D0FB6F894DEBF81
|
||||
:0C3590000FBECDBFED010895F894FFCFF1
|
||||
:10359C0000005F0320000101000A006400E8033F03
|
||||
:1035AC00065B4F666D7D077F6F777C395E79715254
|
||||
:1035BC00656164206661696C005265616479210003
|
||||
:1035CC0000000000350F070FAA0EB30EC70ED70E62
|
||||
:1035DC00000000009C15BF14371566154A158A1596
|
||||
:00000001FF
|
||||
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr3.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr3.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr4.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr4.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr5.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr5.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr6.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr6.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr7.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr7.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr8.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr8.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr9.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addr9.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addra.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addra.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addrb.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addrb.hex
Normal file
File diff suppressed because it is too large
Load diff
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addrc.hex
Normal file
1238
Script/multi_grovepi_installer/grove_pi_v1_4_0_addrc.hex
Normal file
File diff suppressed because it is too large
Load diff
680
Script/multi_grovepi_installer/grovepi3.py
Normal file
680
Script/multi_grovepi_installer/grovepi3.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x03
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepi4.py
Normal file
680
Script/multi_grovepi_installer/grovepi4.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x04
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepi5.py
Normal file
680
Script/multi_grovepi_installer/grovepi5.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x05
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepi6.py
Normal file
680
Script/multi_grovepi_installer/grovepi6.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x06
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepi7.py
Normal file
680
Script/multi_grovepi_installer/grovepi7.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x07
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepi8.py
Normal file
680
Script/multi_grovepi_installer/grovepi8.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x08
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepi9.py
Normal file
680
Script/multi_grovepi_installer/grovepi9.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x09
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepia.py
Normal file
680
Script/multi_grovepi_installer/grovepia.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x0a
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepib.py
Normal file
680
Script/multi_grovepi_installer/grovepib.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x0b
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
680
Script/multi_grovepi_installer/grovepic.py
Normal file
680
Script/multi_grovepi_installer/grovepic.py
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# GrovePi Python library
|
||||
# v1.4
|
||||
#
|
||||
# This file provides the basic functions for using the GrovePi
|
||||
#
|
||||
# The GrovePi connects the Raspberry Pi and Grove sensors. You can learn more about GrovePi here: http://www.dexterindustries.com/GrovePi
|
||||
#
|
||||
# Have a question about this example? Ask on the forums here: http://forum.dexterindustries.com/c/grovepi
|
||||
#
|
||||
'''
|
||||
## License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
GrovePi for the Raspberry Pi: an open source platform for connecting Grove Sensors to the Raspberry Pi.
|
||||
Copyright (C) 2017 Dexter Industries
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
'''
|
||||
# Initial Date: 13 Feb 2014
|
||||
# Last Updated: 11 Nov 2016
|
||||
# http://www.dexterindustries.com/
|
||||
# Author Date Comments
|
||||
# Karan 13 Feb 2014 Initial Authoring
|
||||
# 11 Nov 2016 I2C retries added for faster IO
|
||||
# DHT function updated to look for nan's
|
||||
# Nicole 16 Jan 2019 Bring to v1.4
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import struct
|
||||
import numpy
|
||||
|
||||
import di_i2c
|
||||
|
||||
def set_bus(bus):
|
||||
global i2c
|
||||
i2c = di_i2c.DI_I2C(bus = bus, address = address)
|
||||
|
||||
address = 0x0c
|
||||
max_recv_size = 10
|
||||
set_bus("RPI_1SW")
|
||||
|
||||
if sys.version_info<(3,0):
|
||||
p_version = 2
|
||||
else:
|
||||
p_version = 3
|
||||
|
||||
# Earliest version of the firmware to work with
|
||||
works_with_firmware = [
|
||||
"1.4.0"
|
||||
]
|
||||
|
||||
# interrupt operations
|
||||
COUNT_CHANGES = 0
|
||||
COUNT_LOW_DURATION = 1
|
||||
|
||||
# interrupt trigger mode
|
||||
CHANGE = 1
|
||||
FALLING = 2
|
||||
RISING = 3
|
||||
|
||||
# This allows us to be more specific about which commands contain unused bytes
|
||||
unused = 0
|
||||
retries = 10
|
||||
additional_waiting = 0
|
||||
|
||||
# Get firmware version
|
||||
version_cmd = [8]
|
||||
# No data is available from the GrovePi
|
||||
data_not_available_cmd = [23]
|
||||
|
||||
# Command Format
|
||||
# digitalRead() command format header
|
||||
dRead_cmd = [1]
|
||||
# digitalWrite() command format header
|
||||
dWrite_cmd = [2]
|
||||
# analogRead() command format header
|
||||
aRead_cmd = [3]
|
||||
# analogWrite() command format header
|
||||
aWrite_cmd = [4]
|
||||
# pinMode() command format header
|
||||
pMode_cmd = [5]
|
||||
# Ultrasonic read
|
||||
uRead_cmd = [7]
|
||||
# Accelerometer (+/- 1.5g) read
|
||||
acc_xyz_cmd = [20]
|
||||
# RTC get time
|
||||
rtc_getTime_cmd = [30]
|
||||
# DHT Pro sensor temperature
|
||||
dht_temp_cmd = [40]
|
||||
|
||||
# Grove LED Bar commands
|
||||
# Initialise
|
||||
ledBarInit_cmd = [50]
|
||||
# Set orientation
|
||||
ledBarOrient_cmd = [51]
|
||||
# Set level
|
||||
ledBarLevel_cmd = [52]
|
||||
# Set single LED
|
||||
ledBarSetOne_cmd = [53]
|
||||
# Toggle single LED
|
||||
ledBarToggleOne_cmd = [54]
|
||||
# Set all LEDs
|
||||
ledBarSet_cmd = [55]
|
||||
# Get current state
|
||||
ledBarGet_cmd = [56]
|
||||
|
||||
# Grove 4 Digit Display commands
|
||||
# Initialise
|
||||
fourDigitInit_cmd = [70]
|
||||
# Set brightness, not visible until next cmd
|
||||
fourDigitBrightness_cmd = [71]
|
||||
# Set numeric value without leading zeros
|
||||
fourDigitValue_cmd = [72]
|
||||
# Set numeric value with leading zeros
|
||||
fourDigitValueZeros_cmd = [73]
|
||||
# Set individual digit
|
||||
fourDigitIndividualDigit_cmd = [74]
|
||||
# Set individual leds of a segment
|
||||
fourDigitIndividualLeds_cmd = [75]
|
||||
# Set left and right values with colon
|
||||
fourDigitScore_cmd = [76]
|
||||
# Analog read for n seconds
|
||||
fourDigitAnalogRead_cmd = [77]
|
||||
# Entire display on
|
||||
fourDigitAllOn_cmd = [78]
|
||||
# Entire display off
|
||||
fourDigitAllOff_cmd = [79]
|
||||
|
||||
# Grove Chainable RGB LED commands
|
||||
# Store color for later use
|
||||
storeColor_cmd = [90]
|
||||
# Initialise
|
||||
chainableRgbLedInit_cmd = [91]
|
||||
# Initialise and test with a simple color
|
||||
chainableRgbLedTest_cmd = [92]
|
||||
# Set one or more leds to the stored color by pattern
|
||||
chainableRgbLedSetPattern_cmd = [93]
|
||||
# set one or more leds to the stored color by modulo
|
||||
chainableRgbLedSetModulo_cmd = [94]
|
||||
# sets leds similar to a bar graph, reversible
|
||||
chainableRgbLedSetLevel_cmd = [95]
|
||||
|
||||
# Read the button from IR sensor
|
||||
ir_read_cmd = [21]
|
||||
# Set pin for the IR receiver
|
||||
ir_recv_pin_cmd = [22]
|
||||
# Check if there's data coming from the IR receiver
|
||||
ir_read_isdata = [24]
|
||||
|
||||
# Interrupt-based devices
|
||||
isr_set_cmd = [6]
|
||||
isr_unset_cmd = [9]
|
||||
isr_read_cmd = [10]
|
||||
isr_clear_cmd = [11]
|
||||
isr_active_cmd = [12]
|
||||
|
||||
# Grove Encoders
|
||||
encoder_read_cmd = [13]
|
||||
encoder_en_cmd = [14]
|
||||
encoder_dis_cmd = [15]
|
||||
|
||||
# Dust, Encoder & Flow Sensor commands
|
||||
# dust_sensor_read_cmd=[10]
|
||||
# dust_sensor_en_cmd=[14]
|
||||
# dust_sensor_dis_cmd=[15]
|
||||
# dust_sensor_int_cmd=[9]
|
||||
# dust_sensor_read_int_cmd=[6]
|
||||
# flow_read_cmd=[12]
|
||||
# flow_disable_cmd=[13]
|
||||
# flow_en_cmd=[18]
|
||||
|
||||
|
||||
# Function declarations of the various functions used for encoding and sending
|
||||
# data from RPi to Arduino
|
||||
|
||||
# Write I2C block to the GrovePi
|
||||
def write_i2c_block(block, custom_timing = None):
|
||||
counter = 0
|
||||
reg = block[0]
|
||||
data = block[1:]
|
||||
while counter < 3:
|
||||
try:
|
||||
i2c.write_reg_list(reg, data)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
return
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
continue
|
||||
|
||||
# Read I2C block from the GrovePi
|
||||
def read_i2c_block(no_bytes = max_recv_size):
|
||||
data = data_not_available_cmd
|
||||
counter = 0
|
||||
while data[0] in [data_not_available_cmd[0], 255] and counter < 3:
|
||||
try:
|
||||
data = i2c.read_list(reg = None, len = no_bytes)
|
||||
time.sleep(0.002 + additional_waiting)
|
||||
if counter > 0:
|
||||
counter = 0
|
||||
except:
|
||||
counter += 1
|
||||
time.sleep(0.003)
|
||||
|
||||
return data
|
||||
|
||||
def read_identified_i2c_block(read_command_id, no_bytes):
|
||||
data = [-1]
|
||||
while data[0] != read_command_id[0]:
|
||||
data = read_i2c_block(no_bytes + 1)
|
||||
|
||||
return data[1:]
|
||||
|
||||
# Arduino Digital Read
|
||||
def digitalRead(pin):
|
||||
write_i2c_block(dRead_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block( dRead_cmd, no_bytes = 1)[0]
|
||||
return data
|
||||
|
||||
# Arduino Digital Write
|
||||
def digitalWrite(pin, value):
|
||||
write_i2c_block(dWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Read analog value from Pin
|
||||
def analogRead(pin):
|
||||
write_i2c_block(aRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(aRead_cmd, no_bytes = 2)
|
||||
return number[0] * 256 + number[1]
|
||||
|
||||
|
||||
# Write PWM
|
||||
def analogWrite(pin, value):
|
||||
write_i2c_block(aWrite_cmd + [pin, value, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Setting Up Pin mode on Arduino
|
||||
def pinMode(pin, mode):
|
||||
if mode == "OUTPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 1, unused])
|
||||
elif mode == "INPUT":
|
||||
write_i2c_block(pMode_cmd + [pin, 0, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
|
||||
# Read temp in Celsius from Grove Temperature Sensor
|
||||
def temp(pin, model = '1.0'):
|
||||
# each of the sensor revisions use different thermistors, each with their own B value constant
|
||||
if model == '1.2':
|
||||
bValue = 4250 # sensor v1.2 uses thermistor ??? (assuming NCP18WF104F03RC until SeeedStudio clarifies)
|
||||
elif model == '1.1':
|
||||
bValue = 4250 # sensor v1.1 uses thermistor NCP18WF104F03RC
|
||||
else:
|
||||
bValue = 3975 # sensor v1.0 uses thermistor TTC3A103*39H
|
||||
a = analogRead(pin)
|
||||
resistance = (float)(1023 - a) * 10000 / a
|
||||
t = (float)(1 / (math.log(resistance / 10000) / bValue + 1 / 298.15) - 273.15)
|
||||
return t
|
||||
|
||||
|
||||
# Read value from Grove Ultrasonic
|
||||
def ultrasonicRead(pin):
|
||||
write_i2c_block(uRead_cmd + [pin, unused, unused])
|
||||
number = read_identified_i2c_block(uRead_cmd, no_bytes = 2)
|
||||
return (number[0] * 256 + number[1])
|
||||
|
||||
|
||||
# Read the firmware version
|
||||
def version():
|
||||
write_i2c_block(version_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(version_cmd, no_bytes = 3)
|
||||
return "%s.%s.%s" % (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read Grove Accelerometer (+/- 1.5g) XYZ value
|
||||
# Need to investigate why this reports what was read with the previous command
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def acc_xyz():
|
||||
write_i2c_block(acc_xyz_cmd + [unused, unused, unused])
|
||||
number = read_identified_i2c_block(acc_xyz_cmd, no_bytes = 3)
|
||||
if number[1] > 32:
|
||||
number[1] = - (number[1] - 224)
|
||||
if number[2] > 32:
|
||||
number[2] = - (number[2] - 224)
|
||||
if number[3] > 32:
|
||||
number[3] = - (number[3] - 224)
|
||||
return (number[0], number[1], number[2])
|
||||
|
||||
|
||||
# Read from Grove RTC
|
||||
# Doesn't look to be implemented on the GrovePi
|
||||
def rtc_getTime():
|
||||
write_i2c_block(rtc_getTime_cmd + [unused, unused, unused])
|
||||
number = read_i2c_block()
|
||||
return number
|
||||
|
||||
# Read and return temperature and humidity from Grove DHT Pro
|
||||
def dht(pin, module_type):
|
||||
write_i2c_block(dht_temp_cmd + [pin, module_type, unused])
|
||||
number = read_identified_i2c_block(dht_temp_cmd, no_bytes = 8)
|
||||
|
||||
if p_version==2:
|
||||
h=''
|
||||
for element in (number[0:4]):
|
||||
h+=chr(element)
|
||||
|
||||
t_val=struct.unpack('f', h)
|
||||
t = round(t_val[0], 2)
|
||||
|
||||
h = ''
|
||||
for element in (number[4:8]):
|
||||
h+=chr(element)
|
||||
|
||||
hum_val=struct.unpack('f',h)
|
||||
hum = round(hum_val[0], 2)
|
||||
else:
|
||||
t_val=bytearray(number[0:4])
|
||||
h_val=bytearray(number[4:8])
|
||||
t=round(struct.unpack('f',t_val)[0],2)
|
||||
hum=round(struct.unpack('f',h_val)[0],2)
|
||||
if t > -100.0 and t <150.0 and hum >= 0.0 and hum<=100.0:
|
||||
return [t, hum]
|
||||
else:
|
||||
return [float('nan'),float('nan')]
|
||||
|
||||
# Grove - Infrared Receiver - get the commands received from the Grove IR sensor
|
||||
def ir_read_signal():
|
||||
write_i2c_block(ir_read_cmd + [unused, unused, unused])
|
||||
data_back = read_identified_i2c_block(ir_read_cmd, no_bytes = 7)
|
||||
|
||||
return (data_back[0],
|
||||
data_back[1] + data_back[2] * 256,
|
||||
data_back[3] + data_back[4] * 256 + data_back[5] * (256 ** 2) + data_back[6] * (256 ** 3))
|
||||
|
||||
# Grove - Infrared Receiver - set the pin on which the Grove IR sensor is connected
|
||||
def ir_recv_pin(pin):
|
||||
write_i2c_block(ir_recv_pin_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
# Grove - Infrared Receiver - check if there's any data that hasn't been read so far
|
||||
def ir_is_data():
|
||||
write_i2c_block(ir_read_isdata + 3 * [unused])
|
||||
number = read_identified_i2c_block(ir_read_isdata, no_bytes = 1)
|
||||
|
||||
return number[0] != 0
|
||||
|
||||
# after a list of numerical values is provided
|
||||
# the function returns a list with the outlier(or extreme) values removed
|
||||
# make the std_factor_threshold bigger so that filtering becomes less strict
|
||||
# and make the std_factor_threshold smaller to get the opposite
|
||||
def statisticalNoiseReduction(values, std_factor_threshold = 2):
|
||||
if len(values) == 0:
|
||||
return []
|
||||
|
||||
mean = numpy.mean(values)
|
||||
standard_deviation = numpy.std(values)
|
||||
|
||||
if standard_deviation == 0:
|
||||
return values
|
||||
|
||||
filtered_values = [element for element in values if element > mean - std_factor_threshold * standard_deviation]
|
||||
filtered_values = [element for element in filtered_values if element < mean + std_factor_threshold * standard_deviation]
|
||||
|
||||
return filtered_values
|
||||
|
||||
|
||||
# Grove LED Bar - initialise
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_init(pin, orientation):
|
||||
write_i2c_block(ledBarInit_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set orientation
|
||||
# orientation: (0 = red to green, 1 = green to red)
|
||||
def ledBar_orientation(pin, orientation):
|
||||
write_i2c_block(ledBarOrient_cmd + [pin, orientation, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set level
|
||||
# level: (0-10)
|
||||
def ledBar_setLevel(pin, level):
|
||||
write_i2c_block(ledBarLevel_cmd + [pin, level, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set single led
|
||||
# led: which led (1-10)
|
||||
# state: off or on (0-1)
|
||||
def ledBar_setLed(pin, led, state):
|
||||
write_i2c_block(ledBarSetOne_cmd + [pin, led, state])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - toggle single led
|
||||
# led: which led (1-10)
|
||||
def ledBar_toggleLed(pin, led):
|
||||
write_i2c_block(ledBarToggleOne_cmd + [pin, led, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - set all leds
|
||||
# state: (0-1023) or (0x00-0x3FF) or (0b0000000000-0b1111111111) or (int('0000000000',2)-int('1111111111',2))
|
||||
def ledBar_setBits(pin, state):
|
||||
byte1 = state & 255
|
||||
byte2 = state >> 8
|
||||
write_i2c_block(ledBarSet_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove LED Bar - get current state
|
||||
# state: (0-1023) a bit for each of the 10 LEDs
|
||||
def ledBar_getBits(pin):
|
||||
write_i2c_block(ledBarGet_cmd + [pin, unused, unused])
|
||||
block = read_identified_i2c_block(ledBarGet_cmd, no_bytes = 2)
|
||||
return block[0] ^ (block[1] << 8)
|
||||
|
||||
|
||||
# Grove 4 Digit Display - initialise
|
||||
def fourDigit_init(pin):
|
||||
write_i2c_block(fourDigitInit_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set numeric value with or without leading zeros
|
||||
# value: (0-65535) or (0000-FFFF)
|
||||
def fourDigit_number(pin, value, leading_zero):
|
||||
# split the value into two bytes so we can render 0000-FFFF on the display
|
||||
byte1 = value & 255
|
||||
byte2 = value >> 8
|
||||
# separate commands to overcome current 4 bytes per command limitation
|
||||
if (leading_zero):
|
||||
write_i2c_block(fourDigitValue_cmd + [pin, byte1, byte2])
|
||||
else:
|
||||
write_i2c_block(fourDigitValueZeros_cmd + [pin, byte1, byte2])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set brightness
|
||||
# brightness: (0-7)
|
||||
def fourDigit_brightness(pin, brightness):
|
||||
# not actually visible until next command is executed
|
||||
write_i2c_block(fourDigitBrightness_cmd + [pin, brightness, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set individual segment (0-9,A-F)
|
||||
# segment: (0-3)
|
||||
# value: (0-15) or (0-F)
|
||||
def fourDigit_digit(pin, segment, value):
|
||||
write_i2c_block(fourDigitIndividualDigit_cmd + [pin, segment, value])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set 7 individual leds of a segment
|
||||
# segment: (0-3)
|
||||
# leds: (0-255) or (0-0xFF) one bit per led, segment 2 is special, 8th bit is the colon
|
||||
def fourDigit_segment(pin, segment, leds):
|
||||
write_i2c_block(fourDigitIndividualLeds_cmd + [pin, segment, leds])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - set left and right values (0-99), with leading zeros and a colon
|
||||
# left: (0-255) or (0-FF)
|
||||
# right: (0-255) or (0-FF)
|
||||
# colon will be lit
|
||||
def fourDigit_score(pin, left, right):
|
||||
write_i2c_block(fourDigitScore_cmd + [pin, left, right])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - display analogRead value for n seconds, 4 samples per second
|
||||
# analog: analog pin to read
|
||||
# duration: analog read for this many seconds
|
||||
def fourDigit_monitor(pin, analog, duration):
|
||||
write_i2c_block(fourDigitAnalogRead_cmd + [pin, analog, duration])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
time.sleep(duration)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display on (88:88)
|
||||
def fourDigit_on(pin):
|
||||
write_i2c_block(fourDigitAllOn_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove 4 Digit Display - turn entire display off
|
||||
def fourDigit_off(pin):
|
||||
write_i2c_block(fourDigitAllOff_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - store a color for later use
|
||||
# red: 0-255
|
||||
# green: 0-255
|
||||
# blue: 0-255
|
||||
def storeColor(red, green, blue):
|
||||
write_i2c_block(storeColor_cmd + [red, green, blue])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise
|
||||
# numLeds: how many leds do you have in the chain
|
||||
def chainableRgbLed_init(pin, numLeds):
|
||||
write_i2c_block(chainableRgbLedInit_cmd + [pin, numLeds, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - initialise and test with a simple color
|
||||
# numLeds: how many leds do you have in the chain
|
||||
# testColor: (0-7) 3 bits in total - a bit for red, green and blue, eg. 0x04 == 0b100 (0bRGB) == rgb(255, 0, 0) == #FF0000 == red
|
||||
# ie. 0 black, 1 blue, 2 green, 3 cyan, 4 red, 5 magenta, 6 yellow, 7 white
|
||||
def chainableRgbLed_test(pin, numLeds, testColor):
|
||||
write_i2c_block(chainableRgbLedTest_cmd + [pin, numLeds, testColor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by pattern
|
||||
# pattern: (0-3) 0 = this led only, 1 all leds except this led, 2 this led and all leds inwards, 3 this led and all leds outwards
|
||||
# whichLed: index of led you wish to set counting outwards from the GrovePi, 0 = led closest to the GrovePi
|
||||
def chainableRgbLed_pattern(pin, pattern, whichLed):
|
||||
write_i2c_block(chainableRgbLedSetPattern_cmd + [pin, pattern, whichLed])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - set one or more leds to the stored color by modulo
|
||||
# offset: index of led you wish to start at, 0 = led closest to the GrovePi, counting outwards
|
||||
# divisor: when 1 (default) sets stored color on all leds >= offset, when 2 sets every 2nd led >= offset and so on
|
||||
def chainableRgbLed_modulo(pin, offset, divisor):
|
||||
write_i2c_block(chainableRgbLedSetModulo_cmd + [pin, offset, divisor])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
# Grove Chainable RGB LED - sets leds similar to a bar graph, reversible
|
||||
# level: (0-10) the number of leds you wish to set to the stored color
|
||||
# reversible (0-1) when 0 counting outwards from GrovePi, 0 = led closest to the GrovePi, otherwise counting inwards
|
||||
def chainableRgbLed_setLevel(pin, level, reverse):
|
||||
write_i2c_block(chainableRgbLedSetLevel_cmd + [pin, level, reverse])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
return 1
|
||||
|
||||
def set_pin_interrupt(pin, ftype, interrupt_mode, period):
|
||||
'''
|
||||
Attach an interrupt to a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
ftype - 0 for COUNT_CHANGES, 1 for COUNT_LOW_DURATION
|
||||
interrupt_mode - 1 for CHANGE, 2 for FALLING, 3 for RISING
|
||||
period - as measured in ms (max 65535 ms)
|
||||
'''
|
||||
period_high = period >> 8
|
||||
period_low = period & 0xff
|
||||
combined_params = (pin & 0x0f) + ((ftype & 0x03) << 4) + ((interrupt_mode & 0x03) << 6)
|
||||
write_i2c_block(isr_set_cmd + [combined_params, period_high, period_low])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_pin_interrupt(pin):
|
||||
'''
|
||||
Detach an interrupt from a pin.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_unset_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def unset_all_interrupts():
|
||||
'''
|
||||
Detach all attached interrupts from all D2-D8 pins.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_clear_cmd + 3 * [unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def is_interrupt_active(pin):
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[1] >> pin
|
||||
return value != 0
|
||||
|
||||
def get_active_interrupts():
|
||||
'''
|
||||
Get list of attached interrupts for a given pin or all of them.
|
||||
|
||||
pin - D2-D8 pins; if it's 255 return the state of all pins
|
||||
'''
|
||||
pin = 255
|
||||
write_i2c_block(isr_active_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_active_cmd, no_bytes = 2)
|
||||
value = data[0] + (data[1] << 8)
|
||||
active_interrupts = [i for i in range(2 * 8) if ((value >> i) & 0x01)]
|
||||
return active_interrupts
|
||||
|
||||
def read_interrupt_state(pin):
|
||||
'''
|
||||
Read number of pulses/changes on given port that occurred within a time period.
|
||||
|
||||
pin - D2-D8 pins
|
||||
'''
|
||||
write_i2c_block(isr_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(isr_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def dust_sensor_en(pin = 2, period = 30000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_LOW_DURATION, interrupt_mode=CHANGE, period=period)
|
||||
|
||||
def dust_sensor_dis(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def dust_sensor_read(pin = 2, period = 30000):
|
||||
'''
|
||||
By default, the sample rate is set to 1 at every 30 seconds and this
|
||||
function was written only for that interval.
|
||||
|
||||
If you wish to use a different
|
||||
interval, then use dust_sensor_read_more function. To set a
|
||||
different interval, use set_dust_sensor_interval function.
|
||||
'''
|
||||
lpo = read_interrupt_state(pin)
|
||||
percentage = 100.0 * lpo / period
|
||||
concentration = 1.1 * percentage ** 3 - 3.8 * percentage ** 2 + 520 * percentage + 0.62
|
||||
|
||||
return lpo, percentage, concentration
|
||||
|
||||
def encoder_en(pin = 2, steps = 32):
|
||||
write_i2c_block(encoder_en_cmd + [pin, steps, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoder_dis(pin = 2):
|
||||
write_i2c_block(encoder_dis_cmd + [pin, unused, unused])
|
||||
read_i2c_block(no_bytes = 1)
|
||||
|
||||
def encoderRead(pin = 2):
|
||||
write_i2c_block(encoder_read_cmd + [pin, unused, unused])
|
||||
data = read_identified_i2c_block(encoder_read_cmd, no_bytes = 4)
|
||||
value = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)
|
||||
return value
|
||||
|
||||
def flowEnable(pin = 2, period = 2000):
|
||||
set_pin_interrupt(pin, ftype=COUNT_CHANGES, interrupt_mode=RISING, period=period)
|
||||
|
||||
def flowDisable(pin = 2):
|
||||
unset_pin_interrupt(pin)
|
||||
|
||||
def flowRead(pin = 2):
|
||||
val = read_interrupt_state(pin)
|
||||
return val
|
||||
|
||||
def main():
|
||||
print("library supports this fw versions: " +
|
||||
" ".join('{}'.format(k[1]) for k in enumerate(works_with_firmware)))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
26
Script/multi_grovepi_installer/multi_installer.sh
Normal file
26
Script/multi_grovepi_installer/multi_installer.sh
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env sh
|
||||
echo "Current setup"
|
||||
sudo i2cdetect -y 1
|
||||
|
||||
echo "What address would you like to use the GrovePi on? [3-9 a-c]"
|
||||
read ADDRESS
|
||||
|
||||
# Check if the necessary files for the address exist.
|
||||
if [ -e "grove_pi_v1_4_0_addr$ADDRESS.hex" ] && [ -e "setup$ADDRESS.py" ] && [ -e "grovepi$ADDRESS.py" ]; then
|
||||
echo "Setting up GrovePi with Address $ADDRESS"
|
||||
echo "BURNING FIRMWARE"
|
||||
echo "..."
|
||||
sudo avrdude -c gpio -p m328p -U flash:w:grove_pi_v1_4_0_addr"$ADDRESS".hex
|
||||
echo "INSTALLING PYTHON LIBRARY"
|
||||
sudo python setup"$ADDRESS".py install
|
||||
sudo python3 setup"$ADDRESS".py install
|
||||
echo "I2C DEVICES AVAILABLE"
|
||||
sleep 1
|
||||
sudo i2cdetect -y 1
|
||||
exit 0
|
||||
else
|
||||
echo "The necessary files for this address do not exist."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# thanks to https://github.com/Mimry for the rewrite of this script. Much appreciated!
|
||||
14
Script/multi_grovepi_installer/setup3.py
Normal file
14
Script/multi_grovepi_installer/setup3.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepi3",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepi3'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setup4.py
Normal file
14
Script/multi_grovepi_installer/setup4.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepi4",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepi4'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setup5.py
Normal file
14
Script/multi_grovepi_installer/setup5.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepi5",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepi5'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setup6.py
Normal file
14
Script/multi_grovepi_installer/setup6.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepi6",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepi6'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setup7.py
Normal file
14
Script/multi_grovepi_installer/setup7.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepi7",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepi7'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setup8.py
Normal file
14
Script/multi_grovepi_installer/setup8.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepi8",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepi8'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setup9.py
Normal file
14
Script/multi_grovepi_installer/setup9.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepi9",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepi9'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setupa.py
Normal file
14
Script/multi_grovepi_installer/setupa.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepia",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepia'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setupb.py
Normal file
14
Script/multi_grovepi_installer/setupb.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepib",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepib'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
14
Script/multi_grovepi_installer/setupc.py
Normal file
14
Script/multi_grovepi_installer/setupc.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/python
|
||||
#
|
||||
# These files have been made available online through a Creative Commons Attribution-ShareAlike 3.0 license.
|
||||
# (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
import setuptools
|
||||
setuptools.setup(
|
||||
name="grovepic",
|
||||
description="Drivers and examples for using the GrovePi in Python",
|
||||
author="Dexter Industries",
|
||||
url="http://www.dexterindustries.com/GrovePi/",
|
||||
py_modules=['grovepic'],
|
||||
#install_requires=open('requirements.txt').readlines(),
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue