Мазмұны:

Bluetooth LE және RaspberryPi көмегімен температураны бақылау және жазу: 9 қадам (суреттермен)
Bluetooth LE және RaspberryPi көмегімен температураны бақылау және жазу: 9 қадам (суреттермен)

Бейне: Bluetooth LE және RaspberryPi көмегімен температураны бақылау және жазу: 9 қадам (суреттермен)

Бейне: Bluetooth LE және RaspberryPi көмегімен температураны бақылау және жазу: 9 қадам (суреттермен)
Бейне: MKS Gen L - Marlin 1 1 9 (configuration.h) 2024, Қараша
Anonim
Bluetooth LE және RaspberryPi көмегімен температураны бақылаңыз және жазыңыз
Bluetooth LE және RaspberryPi көмегімен температураны бақылаңыз және жазыңыз
Bluetooth LE және RaspberryPi көмегімен температураны бақылаңыз және жазыңыз
Bluetooth LE және RaspberryPi көмегімен температураны бақылаңыз және жазыңыз

Бұл нұсқаулық 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 позициясын анықтау шығысы үшін конфигурациялаңыз

Қосымша: SensorBug позициясын анықтау шығысы үшін конфигурациялаңыз
Қосымша: SensorBug позициясын анықтау шығысы үшін конфигурациялаңыз
Қосымша: SensorBug позициясын анықтау шығысы үшін конфигурациялаңыз
Қосымша: SensorBug позициясын анықтау шығысы үшін конфигурациялаңыз

Android -де SensorBug -ді позицияны анықтау үшін конфигурациялауға болады Гараж есігі деп аталатын позицияның өзгеруін анықтау үшін SensorBug құрылғының тік тұрғанын немесе жатқызылғанын анықтайды. Құрылғы тегіс болған кезде жазылған мән 0х20 ал егер құрылғы тік тұрса, мәні 0x02, егер X осі жоғары немесе төмен болмаса, X немесе Y позициясы жоғары болса, айырмашылығы жоқ. Мұны істеудің ең оңай жолы - LightBlue қосымшасын пайдалану. SensorBug сканерлеу мәзірінде көрсетілуі керек. Конфигурациялағыңыз келетін құрылғыны таңдаңыз, UUID Accelerometer конфигурациясы үшін GATT сипаттамаларына өтіңіз: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Суретті қараңыз: Жаңа конфигурация жолын жазыңыз:

010d3f02020000002d00000002Жазуды растау үшін конфигурация жолын қайта оқыңыз. Бұл позицияны анықтауға арналған акселерометрді қосады.

Ұсынылған: