Мазмұны:
- 1 -қадам: Raspberry Pi орнату
- 2 -қадам: Raspberry Pi -де MySQL орнату
- 3 -қадам: SensorBugs орнату
- 4 -қадам: Bluetooth LE Python орауышын орнату
- 5 -қадам: SensorBug адресін сканерлеңіз және табыңыз
- 6 -қадам: Python сценарийін қосыңыз
- 7 -қадам: Python сценарийін тексеріңіз
- 8 -қадам: Python сценарийін Crontab -қа қосыңыз
- 9 -қадам: Қосымша: SensorBug позициясын анықтау шығысы үшін конфигурациялаңыз
Бейне: Bluetooth LE және RaspberryPi көмегімен температураны бақылау және жазу: 9 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
Бұл нұсқаулық Blue Radios (BLEHome) мен RaspberryPi 3B Bluetooth LE сенсорлы қатесі бар температуралық бақылаудың көп түйінді жүйесін қалай құру керектігі туралы. Bluetooth LE стандартының арқасында қазір нарықта төмен қуатты сымсыз сенсорлар бар. өте төмен құны үшін және бір монеталық ұяшықта бірнеше ай бойы жұмыс істей алады. Мен алған сенсорлардың бірі - сенсорлық қателер деп аталатын көгілдір радиодан. Амазондағы бағасы шамамен 25 доллар, бұл температура сенсоры, жарық сенсоры мен аксерометрі бар Bluetooth LE құрылғысы, ол сымсыз байланыс орната алатын шағын қондырғыға біріктірілген..
1 -қадам: Raspberry Pi орнату
Бірінші қадам - жұмыс істейтін Raspberry Pi қондырғысын алу. Raspberry Pi веб -сайтындағы нұсқауларды орындаңыз, Raspbian -ды SD картасына жүктеңіз, Raspberry Pi -ге салыңыз және жүктеңіз. Мен өз жүйемді Raspbian Stretch Lite (GUI жоқ) нұсқасымен қараша 2017 -де орнатамын. Қажет болса, WiFi -ді орнатуды жөн көремін. уақыт белдеуі UTC орнына ағымдағы уақыт белдеуіне. Сіз мұны пәрмен арқылы жасай аласыз: $ sudo dpkg-reconfigure tzdataRest нұсқаулықта орнату командалық жол интерфейсі арқылы жасалған деп есептеледі.
2 -қадам: Raspberry Pi -де MySQL орнату
Барлық алынған деректерді сақтау үшін жергілікті базаны орнату пайдалы. Raspberry Pi -де MySQL орнату өте оңай. Сыртқы SQL серверіне қосылу үшін сценарийді өзгерту қиын емес, егер сіз желіде SQL серверін қолданғыңыз келсе, бұл қадамды өткізіп жіберуге болады, желіде көптеген нұсқаулар бар, мен мынаны ұсынамын: https:// www.stewright.me/2014/06/tutorial-install-…
SQL сервері орнатылғаннан кейін сіз MySQL CLI клиентін пайдаланушыны, дерекқорды және кестені құру үшін пайдалана аласыз. MySQL CLI енгізу үшін мына пәрменді қолданыңыз:
$ sudo mysql -uroot -pFirst, алынған деректерді енгізу үшін жергілікті пайдаланушыны жасаңыз:> CREATE USER 'datarc'@'localhost' IDRENEDY BY 'datarc000'; Содан кейін деректер базасы мен кестені жасаңыз:> CREATE DATABASE SensorBug; Пайдаланушыны орнату рұқсат:> SensorBug бағдарламасындағы барлық артықшылықтарды беру.* TO 'datasrc'@'localhost'; Енді дерекқорға жаңа кесте қосыңыз. Бұл мысал үшін мен келесі бағандары бар кестені қосамын: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE және ACCEROMETER
- КҮН/УАҚЫТ - бұл деректер жазылған күн мен уақыт
- АДРЕС - бұл SensorBug MAC хабары алынған
- ЛОКОЦИЯ - сенсордың қай жерде орналасқанын көрсететін адам оқитын жол
- ТЕМПЕРАТУРА - бұл жазылған температура
- ACCELE - бұл сенсордың орнын жазуға арналған акселерометрдің шығыс мәні (егер қосылған болса)
Бұны орындайтын пәрмен:> SensorBug USE; > КЕСТЕ деректерін жасаңыз (DATE, УАҚЫТ, TINYTEXT мекен -жайы, TINYTEXT орналасқан жері, FLOAT температурасы, accele INT); Енді мәліметтер базасы дайын, sensorBugs орнатуға көшуге болады.
3 -қадам: SensorBugs орнату
Сенсорлық қателер - бұл өте ұқыпты құрылғылар. Өкінішке орай, өндіруші оны бағдарламалау үшін тек IOS қосымшасын ұсынды. Егер сізде тек Android құрылғысы болса, онымен жұмыс істеуге болады. Бірінші қадамда құрылғыны телефонмен жұптастырыңыз. Мен мұны RaspberryPi -мен тікелей жасай алатынымды білуге тырыстым, өкінішке орай, RaspberryPi -дегі Bluetooth LE драйвері әлі де эксперименталды болып көрінеді және оның Bluetooth LE құрылғыларымен жұптасуына жол бермейтін қателер бар. BlueZ драйверінің болашақ нұсқасы бұл мәселені шешуі мүмкін, бірақ қазіргі жазуда SensorBug -ты RaspberryPi -мен жұптастырудың ешқандай мүмкіндігі жоқ. Бізге қажет нәрсе - SensorBug конфигурациялау үшін телефон. Әдепкі бойынша, SensorBug құрылғымен жұпталғаннан кейін температура туралы мәліметтерді 1 секунд аралығында жарнамалай бастайды. Температура деректерін алу үшін бұл қажет. Егер сіз позицияны немесе жарық сенсорын пайдалану үшін кеңейтуді жоспарласаңыз, құрылғы конфигурациядан гөрі қажет болады. Бастау үшін біз құрылғыны жұптап, ажыратамыз. Бұл температураны түсіру үшін жеткілікті жақсы болады. SensorBug екі түймесін басу арқылы бастаңыз. Көк/жасыл жарық диоды жыпылықтайды, бұл оның қосылғанын көрсетеді. Түйменің біреуін басыңыз, жасыл жарық диоды жануы керек, қуат қосылғанын білдіреді. Егер жасыл жарық диоды жанбаса, құрылғыны қайта қосуға тырысу үшін екі түймені де басыңыз. Бұл құрылғыны жұп режиміне қояды. Телефондағы Bluetooth конфигурация мәзіріне өтіп, SensorBug құрылғысын іздеңіз. Ол пайда болғаннан кейін оны құрылғыға жұптастыру үшін таңдаңыз, бұл енді SensorBug қосылған және температура туралы ақпаратты жарнамалайды.
4 -қадам: Bluetooth LE Python орауышын орнату
Содан кейін біз Bluetooth LE стекімен сөйлесу үшін python үшін кітапхананы орнатуымыз керек. Нұсқауды мына жерден табуға болады: https://github.com/IanHarvey/bluepy Python 2.7 үшін келесі пәрмендерді енгізу оңай:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
5 -қадам: SensorBug адресін сканерлеңіз және табыңыз
SensorBug MAC мекенжайын білу үшін мына пәрменді пайдаланыңыз: $ sudo hcitool lescan Сіз келесідей шығуды көруіңіз керек:
EC: FE: 7E: 10: B1: 92 (белгісіз) Егер сіздің айналаңызда Bluetooth LE құрылғылары көп болса, қайсысымен сөйлесіп жатқаныңызды білу қиын болуы мүмкін. Сіз толығырақ ақпарат беретін bluetoothctl қолдана аласыз:
$ sudo bluetoothctl [bluetooth]# сканерлеу [ЖАҢА] құрылғы EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] EC: FE: 7E: 10: B1: 92 өндіруші Деректер кілті: 0x0085 [CHG] EC құрылғысы: FE: 7E: 10: B1: 92 ManufacturerData мәні: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x00 [CHG] EC EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x3c [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x25 [CHG] EC EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x09 [CHG] EC EC: FE: 7E: 10: B1: 92 Деректер Мәні: 0x41 [CHG] Құрылғы EC: FE: 7E: 10: B1: 92 Өндіруші Деректер мәні: 0x02 [CHG] Құрылғы EC: FE: 7E: 10: B1: 92 Өндіруші Деректер мәні: 0x02 [CHG] Құрылғы EC: FE: 7E: 10: B1: 92 ManufacturerData мәні: 0x43 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x0b [CHG] EC EC: FE: 7E: 10: B1: 92 ManufacturerData Мән: 0x01 [CHG] Құрылғы EC: FE: 7E: 10: B1: 92 Өндіруші Деректер мәні: 0x6f
MAC мекенжайын жазыңыз, қажет емес Bluetooth LE құрылғыларын сүзу үшін оны питон сценарийіне енгізу керек.
6 -қадам: Python сценарийін қосыңыз
Python сценарийінің көшірмесін мына жерден алуға болады:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Міне, сол файл, көшіру кезінде шегініске назар аударыңыз:
Сонымен қатар, python файлындағы MAC мекенжайын сканерлеу нәтижесінен алынған сенсорлық адреске сәйкес жаңартыңыз.
# Бұл бағдарлама ақысыз бағдарламалық жасақтама: оны қайта таратуға және/немесе өзгертуге болады
# жариялаған GNU General Public License шарттарына сәйкес
# ақысыз бағдарламалық қамтамасыз ету қоры, лицензияның 3 нұсқасы, немесе
# (сіздің қалауыңыз бойынша) кез келген кейінгі нұсқа.
#
# Бұл бағдарлама пайдалы болады деген үмітпен таратылады, # бірақ КЕПІЛДІКСІЗ; кепілдіксіз
# САУДАЛЫҚ немесе белгілі бір мақсатқа сай болу. Қараңыз
Толық ақпарат алу үшін # GNU General Public License.
#
# Сіз GNU General Public License көшірмесін алуыңыз керек еді
# осы бағдарламамен бірге. Егер жоқ болса, қараңыз.
# bscan.py - Қарапайым Bluetooth LE сканері мен деректерді шығарушы
bluepy.btle импорттау сканерінен, DefaultDelegate
импорт уақыты
pymysql импорттау
импорт құрылымы
хост атауы = 'localhost'
пайдаланушы аты = 'datarc'
пароль = 'datarc000'
дерекқор = 'SensorBug'
#Лесканнан сенсордың MAC мекенжайын енгізіңіз
SENSOR_ADDRESS = [«ec: fe: 7e: 10: b9: 92», «ec: fe: 7e: 10: b9: 93»]
SENSOR_LOCATION = [«Гараж», «Сыртқы»]
DecodeErrorException класы (Ерекшелік):
def _init _ (өзіндік, мән):
self.value = мән
def _str _ (өзіндік):
қайтару (өзін -өзі бағалау)
ScanDelegate класы (DefaultDelegate):
def _init _ (өзін):
DefaultDelegate._ init _ (өзін -өзі)
def handleDiscovery (өзіндік, әзірлеуші, isNewDev, isNewData):
егер isNewDev:
басып шығару «Табылған құрылғы», dev.addr
elif isNewData:
басып шығару «Жаңа деректер алынды», dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
#blesensor кестесі - бұл күн, уақыт, адрес, орналасқан жері, темп, accero
cur = қосылатын курсор ()
dostr = 'INSERT INTO data VALUES (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
Conn.commit ()
сканер = Scanner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (хост = хост атауы, пайдаланушы = пайдаланушы аты, passwd = пароль, db = дерекқор)
ManuDataHex =
ReadLoop = True
тырысу:
while (ReadLoop):
құрылғылар = scanner.scan (2.0)
ManuData = «»
құрылғыларға арналған:
енгізу = 0
AcceroData = 0
AcceroType = 0
TempData = 0
saden үшін SENSOR_ADDRESS:
жазба += 1
егер (dev.addr == saddr):
басып шығару «Device %s (%s), RSSI = %d dB» %(dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [жазба-1]
dev.getScanData () ішіндегі (adtype, desc, value) үшін:
« %s = %s» %басып шығару (түсу, мән)
егер (төменде == «Өндіруші»):
ManuData = мән
егер (ManuData == «»):
басып шығару «Деректер қабылданбады, декодтауды аяқтаңыз»
жалғастыру
#ManuData баспа
i, j in zip үшін (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i+j, 16))
#Шикі Өндіруші деректерін декодтауды бастаңыз
егер ((ManuDataHex [0] == 0x85) және (ManuDataHex [1] == 0x00)):
басып шығару «0x0085 тақырып байты табылды»
басқа:
басып шығару «0x0085 тақырып байты табылмады, декодтау тоқтатылды»
жалғастыру
#Үлкен/кішіге өту
#Index 5 - 0x3c, батарея деңгейі мен конфигурацияны көрсетіңіз #
егер (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#басып шығару «TotalLen:» + str (len (ManuDataHex))
while (idx <len (ManuDataHex)):
#басып шығару «Idx:» + str (idx)
#басып шығару «Деректер:» + он алтылық (ManuDataHex [idx])
егер (ManuDataHex [idx] == 0x41):
#Аксерометр деректері
idx += 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx+1]
idx += 2
элиф (ManuDataHex [idx] == 0x43):
#Температура туралы мәліметтер
idx += 1
TempData = ManuDataHex [idx]
TempData += ManuDataHex [idx +1] * 0x100
TempData = TempData * 0.0625
idx += 2
басқа:
idx += 1
басып шығару «Құрылғы мекенжайы:» + CurrentDevAddr
басып шығару «Құрылғының орналасқан жері:» + CurrentDevLoc
«Батарея деңгейі:» + str (BatteryLevel) + «%» басып шығарыңыз
басып шығару «Config Counter:» + str (ConfigCounter)
басып шығару «Accelero Data:» + hex (AcceleroType) + «» + hex (AcceleroData)
басып шығару «Temp Data:» + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = жалған
DecodeErrorException қоспағанда:
өту
7 -қадам: Python сценарийін тексеріңіз
Сценарий түбірде орындалуы керек, сондықтан:
$ sudo python bscan.py ашылған құрылғы ec: 6e: 7e: 10: b1: 92 құрылғы ec: 6e: 7e: 10: b1: 92 (жалпыға ортақ), RSSI = -80 dB Flags = 06 толық емес 16b қызметтер = 0a18 өндіруші = 850002003c25094102024309016f 0x0085 тақырыптық байт табылды Құрылғының мекенжайы: ec: 6e: 7e: 10: b1: 92 Құрылғының орналасқан жері: Гараж батареясының деңгейі: 37% Config Counter: 9 Accero деректері: 0x2 0x2 Temp Data: 16.5625
8 -қадам: Python сценарийін Crontab -қа қосыңыз
Питон сценарийі түбірде іске қосылуы керек, сондықтан егер сіз деректерді автоматты түрде түсіргіңіз келсе, оны түбірлік контейнерге қосу қажет болады. Бұл мысал үшін мен сценарийді әр 20 минут сайын іске қосамын: Пәрменді қолданыңыз:
$ sudo crontab -e
# Бұл файлды cron арқылы орындалатын тапсырмаларды енгізу үшін өңдеңіз.
# # Орындалатын әрбір тапсырма бір жол арқылы анықталуы керек # тапсырма қашан орындалатынын және # # тапсырма үшін қандай команданы орындау керектігін көрсетіп, # минут ішінде нақты мәндерді бере аласыз.), сағат (сағ), айдың күні (домен), ай (сәрсенбі), # және аптаның күні (dow) немесе осы өрістерде '*' қолданыңыз ('кез келген' үшін). # # Тапсырмалар басталатынын ескертіңіз cron жүйесіне негізделген # демонның уақыт пен белдеу туралы түсінігі. # # Crontab тапсырмаларының нәтижесі (қателерді қоса) crontab файлы тиесілі пайдаланушыға # электрондық пошта арқылы жіберіледі (егер қайта бағытталмаса). # # Мысалы, сіз апта сайын таңғы 5 -те # барлық пайдаланушы есептік жазбаларының сақтық көшірмесін жасай аласыз: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Қосымша ақпарат алу үшін мына сілтемені қараңыз. crontab (5) және cron (8) қолмен беттері # # mh dom mon dow командасы 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
Міне бітті. Python сценарийі белгілі бір уақыт аралығында орындалады және шығуды SQL дерекқорына қайта кодтайды
9 -қадам: Қосымша: SensorBug позициясын анықтау шығысы үшін конфигурациялаңыз
Android -де SensorBug -ді позицияны анықтау үшін конфигурациялауға болады Гараж есігі деп аталатын позицияның өзгеруін анықтау үшін SensorBug құрылғының тік тұрғанын немесе жатқызылғанын анықтайды. Құрылғы тегіс болған кезде жазылған мән 0х20 ал егер құрылғы тік тұрса, мәні 0x02, егер X осі жоғары немесе төмен болмаса, X немесе Y позициясы жоғары болса, айырмашылығы жоқ. Мұны істеудің ең оңай жолы - LightBlue қосымшасын пайдалану. SensorBug сканерлеу мәзірінде көрсетілуі керек. Конфигурациялағыңыз келетін құрылғыны таңдаңыз, UUID Accelerometer конфигурациясы үшін GATT сипаттамаларына өтіңіз: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Суретті қараңыз: Жаңа конфигурация жолын жазыңыз:
010d3f02020000002d00000002Жазуды растау үшін конфигурация жолын қайта оқыңыз. Бұл позицияны анықтауға арналған акселерометрді қосады.
Ұсынылған:
MCP9808 және Raspberry Pi көмегімен температураны бақылау: 4 қадам
MCP9808 мен Raspberry Pi көмегімен температураны бақылау: MCP9808 - жоғары дәлдіктегі сандық температура сенсоры ± 0,5 ° C I2C шағын модулі. Олар температураны сезуді қолдануды жеңілдететін пайдаланушы бағдарламалайтын регистрлермен біріктірілген. MCP9808 жоғары дәлдіктегі температура сенсоры өнеркәсіпке айналды
MCP9808 және Arduino Nano көмегімен температураны бақылау: 4 қадам
MCP9808 және Arduino Nano көмегімен температураны бақылау: MCP9808 - жоғары дәлдіктегі сандық температура сенсоры ± 0,5 ° C I2C шағын модулі. Олар температураны сезуді қолдануды жеңілдететін пайдаланушы бағдарламалайтын регистрлермен біріктірілген. MCP9808 жоғары дәлдіктегі температура сенсоры өнеркәсіпке айналды
ARUPI - экологиялық экологиялық дыбыс экологтарына арналған төмен бағалы автоматтандырылған жазу блогы/автономды жазу блогы: 8 қадам (суреттермен)
ARUPI - Дыбыстық экологтарға арналған Автоматтандырылған Жазу Бөлімі/Автономды Жазу Бөлімі (ARU): Бұл нұсқаулықты Энтони Тернер жазған. Жоба Кент Университетінің Есептеу Мектебіндегі Сарайдың көп көмегінің арқасында әзірленді (Дэниэл Нокс мырза үлкен көмек болды!). Бұл сізге автоматтандырылған аудио жазуды қалай құру керектігін көрсетеді
Arduino және PWM желдеткіштерімен температураны бақылау: 6 қадам (суреттермен)
Arduino мен PWM желдеткіштерімен температураны басқару: Arduino мен PWM желдеткіштеріндегі температураны бақылау DIY сервері/желілік тіректі салқындату үшін Бірнеше апта бұрын мен желілік құрылғылар мен бірнеше серверлері бар тіректі орнатуым керек болды. Сондықтан қыстың температурасы мен
Xbox Controller арқылы бетті бақылау және бақылау арқылы қайырымдылық робот - Arduino: 9 қадам (суреттермен)
Xbox Controller арқылы бетті бақылау және бақылау арқылы қайыршы робот - Arduino: Біз қайыршы робот жасамақпыз. Бұл робот тітіркендіруге немесе өтіп бара жатқан адамдардың назарын аударуға тырысады. Бұл олардың беттерін анықтап, оларға лазермен оқ атуға тырысады. Егер сіз роботқа тиын берсеңіз, ол ән айтып, би билейді. Роботқа қажет болады