Turinys:
- 1 žingsnis: „Dragonbord 410c“- „Publicação Dos Sensores“- „Analogicos“
- 2 žingsnis: Sensores Digitais - Publicação
- 3 žingsnis: „Codigo Para Acionamento Sirene“
- 4 žingsnis: „Codigo Twitter“- įrašas
- 5 žingsnis: Centro De Comando
- 6 žingsnis: „Codigo Twitter“- „Monitoração“
- 7 žingsnis: Estrutura AWS
Video: Centro De Comando Emergencias - Erupção De Vulcão E Terremotos: 7 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Projeto acadêmico para atender cenário de colaboração através da internet para divulgação de desastres naturais, onde será possível and detecção dos acontecimentos através de sensores IOT de temperatura, luminosidade, oscilação (tilte) e botão de pânico. Ainda no cenário de colaboração prevemos integração com o Twitter ir aplicativos com support mqtt para acionamento do alerta.
Pasinaudokite įvairiomis galimyb ÷ mis įeiti į solução, pasikonsultuokite su centriniu operatoriumi, kuris yra viešai prieinamas ir pateikiamas informacijos koregavimo įrodymas. Tal tomada de decisão é essential diante ao pânico que um alarme falso pode gerar.
Išsiųskite pranešimų apie SMS žinutes, pranešimų apie klientus, el. Pašto, sirenos ir „Twitter“pranešimus.
O AWS kartojimo, įskaitant IOT CORE, EC2 ir SNS, projeto kontūras
Sensores da DragonBord 410c
klientas android mqtt
Atsisiųskite „desenvolvido em python“
Autores:
Diego Fernandes dos Santos - [email protected]
Gabrielis Piovani Moreira dos Santos - [email protected]
Gustavo Venancio Luz - [email protected]
Paulo Henrique Almeida Santos - [email protected]
1 žingsnis: „Dragonbord 410c“- „Publicação Dos Sensores“- „Analogicos“
Abaixo o codigo de publicação dos sensores analógicos, os sensores de temperatura e luminesidade estão configurados para que assim que detectarem uma variação fora do padrão pré estabelecido enviarem um alerta através do protocolo mqtt sinalizando um evento.
Este alerta começa a contagem regressiva que pode ser suspensa ou acelerada pelo operador.
O contador para o alerta começa contagem regressiva em 60 segments, and todo novo alerta detectado decresce o contador em 20 segundos.
programa rodando dentro da dragon borad 410c
#!/usr/bin/python3import spidev iš libsoc importuoti gpio iš laiko importavimo miego
# Importa lib para comunicacao com MOSQUITTO import paho.mqtt.client as mqtt
spi = spidev. SpiDev () spi.open (0, 0) spi.max_speed_hz = 10000 spi.mode = 0b00 spi.bits_per_word = 8
#Usando a porta ADC1 channel_select1 = [0x01, 0x80, 0x00]
#Para naudokite portą ADC2, naudokite konfigūraciją arba nustatykite kanalą_select2 = [0x01, 0xA0, 0x00]
def on_connect (mqttc, obj, vėliavos, rc): print ("rc:" + str (rc))
def on_message (mqttc, obj, msg): print (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))
def on_publish (mqttc, obj, mid): print ("Pranešimo ID:" + str (viduryje) + "\ n") praeiti
# „Criamos“klientas ir „setamos suas“konfigūracijos mqttc = mqtt. Client ()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
pub = mqtt. Client ("grupo3")
# Conexao com localhost, uma vez que testamos fora do labredes. broker_address = "34.230.74.201"
pub.connect (broker_address)
jei _vardas _ == '_ pagrindinis_': gpio_cs = gpio. GPIO (18, gpio. DIRECTION_OUTPUT)
su gpio.request_gpios ([gpio_cs]): contador = 0 adc_value_old = 0 adc_value2_old = 0, o contador <50: gpio_cs.set_high () miegas (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select1) gpio) contador = contador + 1 adc_value = (rx [1] << 8) & 0b1100000000 adc_value = adc_value | (rx [2] ir 0xff) adc_value = ((((adc_value * 5)) / 1024) - 0,5) * 100 spausdinimo ("Temperatūra: % f / n" % adc_value) pub.publish ("temperatura", str (adc_value)) # teste para acionar contador do alarme, teste ultima leitura + 5%
if adc_value_old == 0: adc_value_old = adc_value if adc_value> (adc_value_old*1.05): pub.publish ("ALARME", "ON") print ("Alarmado temperatura") adc_value_old = adc_value sleep (1)
gpio_cs.set_high () miegas (0.00001) gpio_cs.set_low () rx = spi.xfer (channel_select2) gpio_cs.set_high () contador = contador + 1 adc_value2 = (rx [1] << 8) & 0b1100000000 adc_value2 = adc_value2 = adc (rx [2] ir 0xff) adc_value2 = adc_value2 /10 print ("Luminosidade: % f / n" % adc_value2) pub.publish ("luminosidade", str (adc_value2))
# teste para acionar contador do alarme, teste ultima leitura + 50%
if adc_value2_old == 0: adc_value2_old = adc_value2 if adc_value2> (adc_value2_old*1.5): pub.publish ("ALARME", "ON") print ("Alarmado Luminosidade") adc_value2_old = adc_value2 miegas
2 žingsnis: Sensores Digitais - Publicação
código para publicação dos sensores digitais
Os sensores digitalis neste projeto foram o tilte que detecta os tremores e o botão para simular o uso de um botão de pânico.
quando detectado uma anomalia ou botão de pânico pressionado a contagem regressiva é iniciada.
programa rodando dentro da dragon borad 410c
iš libsoc_zero. GPIO importavimo mygtukas iš libsoc_zero. GPIO importas Pakreipti nuo laiko importavimo miego importas paho.mqtt.client kaip mqtt import sys
def on_connect (mqttc, obj, vėliavos, rc): print ("Conectado" + str (rc))
def on_message (mqttc, obj, msg): print (msg.topic + "" + str (msg.qos) + "" + str (msg.payload))
def on_publish (mqttc, obj, mid): # print ("Pranešimo ID:" + str (mid) + "\ n") pass
def detectaTilt (): count = 0 sleep_count = 0, o tiesa: try: tilt.wait_for_tilt (1), išskyrus: sleep_count += 1 else: count += 1 sleep_count += 1 if sleep_count> 999: break
print ("count:", count), jei skaičius> 200: pub = mqttc.publish ("TERREMOTO", "ON") pub = mqttc.publish ("SISMOGRAFO", str (count)) # Criamos o client e setamos suas configuracoes mqttc = mqtt. Client ()
mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish
tema = "grupo3"
# Conexao com localhost, uma vez que testamos fora do labredes. mqttc.connect ("34.230.74.201", 1883)
pakreipti = pakreipti („GPIO-A“)
btn = Mygtukas („GPIO-C“)
nors tiesa: miegas (0,25) detaTilt (), jei btn.is_pressed (): pub = mqttc.publish ("PANICO", "ON") print ("Botao ON") miegas (1) pub = mqttc.publish ("PANICO "," OFF ") # else: # pub = mqttc.publish (" PANICO "," OFF ") # print (" Botao OFF ")
3 žingsnis: „Codigo Para Acionamento Sirene“
„SIRENE“programos „Codigo para subscrição para acionamento da“programa, programa rodando dentro da dragon board 410c
# Importa lib para comunicacao com MOSQUITTOimport paho.mqtt.client as mqtt
iš libsoc_zero. GPIO importo šviesos diodas iš laiko importavimo miego režimo šviesos diodas = LED ('GPIO-E') #led.off ()
# Apibrėžkite fazer ao conectar def on_connect (klientas, objektas, vėliavos, rc): print („ConexÃà £ £ įsteigimo com brokeris“)
# Apibrėžkite fazer ao imtuvą uma mensagem def on_message (klientas, obj, pranešimas): print ("LED" + str (message.payload.decode ("utf-8")))) if str (message.payload.decode ("utf-8")) == "on": print ("Sirene ligada") led.on () else: print ("Sierene apagada") led.off ()
# IP brokeris broker_address = "34.230.74.201"
# Cria o cliente sub = mqtt. Client ("grupo3")
sub.connect (broker_address)
sub.on_message = on_message sub.on_connect = on_connect
# Nepateikite temos subprenumeruoti ("SIRENE", qos = 0)
# Loop para escuta sub.loop_forever ()
4 žingsnis: „Codigo Twitter“- įrašas
Código para publicação do twitter assim que acionado o alarme.
virtualus kodas AWS EC2
#!/usr/bin/env python #---------------------------------------- ------------------------------- # twitter-post-status #-paskelbia būsenos pranešimą jūsų laiko juostoje # --- -------------------------------------------------- ------------------ importuoti paho.mqtt.prenumeruoti kaip prenumeruoti
importo laikas
iš „Twitter“importo *
#------------------------------------------------- ---------------------- # koks turėtų būti mūsų naujas statusas? #------------------------------------------------- ---------------------- new_status = "#Terremoto Procure uma zona segura-teste"
#------------------------------------------------- ---------------------- # įkelkite mūsų API kredencialus # ---------------------- ------------------------------------------------- importas sys sys.path.append (".") importavimo konfig
#------------------------------------------------- ---------------------- # sukurkite „Twitter“API objektą # ---------------------- ------------------------------------------------ twitteris = „Twitter“(auth = OAuth ('senha removeida))
#------------------------------------------------- ---------------------- # paskelbkite naują būseną # twitter API dokumentai: https://dev.twitter.com/rest/reference/post/statu… #------------------------------------------------- ----------------------
o 1: m = prenumeruoti.simple ("twitteralarme", hostname = "172.31.83.191", išlaikytas = False), jei m.topic == "twitteralarme" ir str (m.payload.decode ("utf-8")) == "on": rezultatai = twitter.statuses.update (status = (new_status)+str (time.time ())) # print ("atnaujinta būsena: % s" % new_status)
5 žingsnis: Centro De Comando
semper que acionado um dispositivo manual or you detectado um alerta manual do usuário é acionada uma contagem regressiva para envio de mensagem. Operatoriaus pareigų atšaukėjas arba envio ar akionaro ar envio imediato do Alerta.
Jei norite naudoti „Android“telefoną, naudokitės „Android“telefonu, kad galėtumėte naudotis centro centru.
virtualus kodas AWS EC2
importuoti paho.mqtt.client kaip pahoimport paho.mqtt.
temos = ['#']
gatilho = 0 hora_disparo = 0 publis.single ("ACIONADO", "OFF", qos = 1, hostname = "172.31.83.191") publis.single ("sensor1", "OFF", qos = 1, hostname = "172.31".83.191 ") public.single (" sensor2 "," OFF ", qos = 1, hostname =" 172.31.83.191 ")
connflag = Netiesa
def on_connect (klientas, vartotojo duomenys, vėliavos, rc): global connflag connflag = True print (connflag) print ("Ryšys grąžino rezultatą:" + str (rc))
def on_message (klientas, vartotojo duomenys, žinutė): # print ("teste") print (msg.topic+""+str (msg.payload))
def on_log (klientas, vartotojo duomenys, lygis, buf): print (msg.topic+""+str (msg.payload))
mqttc = paho. Client ("Broker_MSG") mqttc.on_connect = on_connect mqttc.on_message = on_message
awshost = "data.iot.us-east-1.amazonaws.com" awsport = 8883 clientId = "a2rczvc6ni8105" thingName = "Ufscar2018" caPath = "aws-iot-rootCA.crt" certPath = "9e85dfd42a-certificate.pem. crt "keyPath =" 9e85dfd42a-private.pem.key "mqttc.tls_set (caPath, certfile = certPath, keyfile = keyPath, cert_reqs = ssl. CERT_REQUIRED, tls_version = ssl. PROTOCOL_TLSv1_2, šifravimo prieigos kodai), keepalive = 60) mqttc.loop_start ()
o 1: hora = laikas.laikas () miegas (.1) publis.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191")
# if connflag == Tiesa: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) if gatilho == 1: publis.single ("TEMPO", str. (apvalus (hora_disparo-hora, 0)), qos = 1, hostname = "172.31.83.191") publis.single ("LEDTERREMOTO", "on", qos = 1, hostname = "172.31.83.191") else: public.single ("TEMPO", "99", qos = 1, hostname = "172.31.83.191") # print ("") if (hora> hora_disparo) ir (gatilho == 1): # print ("TERREMOTO") # print (connflag) if connflag == True: # mqttc.publish ("message", json.dumps ({'message': "TERREMOTO"}), qos = 1) # mqttc.publish ("message", "TERREMOTO" ", qos = 1) mqttc.publish (" pranešimas ", json.dumps (" TERREMOTO - PROCURE UMA ZONA SEGURA "), qos = 1)
# print ("teste SNS") # publis.single ("LED", "on", hostname = "172.31.83.191") publis.single ("SIRENE", "on", qos = 1, hostname = "172.31. 83.191 ") public.single (" TEMPO "," TERREMOTO ", qos = 1, pagrindinio kompiuterio pavadinimas =" 172.31.83.191 ") publis.single (" ACIONADO "," OFF ", qos = 1, hostname =" 172.31.83.191 ") public.single ("twitteralarme", "on", qos = 1, hostname = "172.31.83.191") publis.single ("twitter", "TERREMOTO - PROCURE UMA ZONA SEGURA", qos = 1, hostname = "172.31.83.191 ") gatilho = 0 miego (5) m = prenumeruoti.paprastas (temos, pagrindinio kompiuterio pavadinimas =" 172.31.83.191 ", išlaikytas = klaidingas), jei m.topic ==" ACIONADO "ir str (m.payload.decode (" utf-8 ")) ==" OFF ": gatilho = 0 spausdinti (" atšaukti "), jei m.topic ==" medico "ir str (m.payload.decode (" utf-8 ")) ==" on ": if connflag == Tiesa: mqttc.publish (" medico ", json.dumps (" MEDICOS - EMERGENCIA TERREMOTO "), qos = 1) jei m.topic ==" bombeiro "ir str (m.payload.decode ("utf -8")) == "on": if connflag == Tiesa: mqttc.publish ("bombeiro", json.dumps ("BOMBEIRO - EMERGENCIA TERREMOTO"), qos = 1) jei m.topic == " ambulancia "ir str (m.payloa d.decode ("utf -8")) == "on": if connflag == Tiesa: mqttc.publish ("ambulancia", json.dumps ("AMBULANCIA - EMERGENCIA TERREMOTO"), qos = 1) jei m. tema == "urgente" ir str (m.payload.decode ("utf-8")) == "on": publis.single ("ACIONADO", 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+5, jei str (m.payload.decode ("utf-8")) == "ON": jei gatilho == 1: print ("acelerado 20") hora_disparo = hora_disparo -20 dar: spausdinti („Acionado“) publis.single („ACIONADO“, 1, qos = 1, hostname = "172.31.83.191") gatilho = 1 hora_disparo = time.time ()+60
6 žingsnis: „Codigo Twitter“- „Monitoração“
„Twitter“stebėjimo kodas, „pesquisa“įrašas ir regioo de sorocaba
virtualus kodas, skirtas virtualiai AWS EC2
n
iš „Twitter“importo *importavimo konfigūracijos importo paho.mqtt.publish kaip paskelbti
iš laiko importuoti miegą
twitter = Twitter (auth = OAuth (config.access_key, config.access_secret, config.consumer_key, config.consumer_secret))
platuma = -23,546211 ilguma = -46,637840 alcance = 50 resultados = 1
public.single ("twitter_alarme", "ON", hostname = "34.230.74.201")
result_count = 0 last_id = Nėra vėliavos = 0
i diapazone (60): #----------------------------------------- ------------------------------ # atlikite paiešką pagal platumą ir ilgumą # twitter API dokumentai: https:// dev. twitter.com/rest/reference/get/search… #------------------------------------- ---------------------------------- pabandykite: query = twitter.search.tweets (q = "#Terremoto", geokodas = " %f, %f, %dkm" %(platuma, ilguma, alcance), max_id = last_id) print ("leu")
išskyrus: spausdinti ("erro acesso twitter") pertrauka
užklausos rezultatui ["statusai"]:
#------------------------------------------------- ---------------------- # apdorokite rezultatą tik tada, kai jis turi geografinę vietą # ----------------- -------------------------------------------------- ---- if result ["geo"]: result_count += 1 last_id = result ["id"] sleep (1) if result_count == resultados: flag += 1 publis.single ("twitter_alarme", "ON", hostname = "34.230.74.201") public.single ("twitter", "TERREMOTO - DETECTADO", hostname = "34.230.74.201") pertrauka
7 žingsnis: Estrutura AWS
Naudokite virtualų „maquina“virtualųjį rodiklį, kuriame yra „AWS EC2“
Naudoti AWS IOT CORE, skirtą MQTT tarnybai, konfigūruoti kaip konfigūraciją arba tipo mensagem
Naudojimo temos, skirtos AWS SNS, skirtos AWS IOT CORE
Rekomenduojamas:
Paprasta prekybos centro programa naudojant RFID RC-522 ir „Arduino Mega“: 6 žingsniai
Paprasta prekybos centro programa naudojant RFID RC-522 ir „Arduino Mega“: malonu vėl jus matyti čia, mano kitoje pamokoje, čia aš padėsiu jums sukurti paprastą prekybos centro programą, naudojant RFID RC-522 ir „Arduino“su apdorojimu kuriant paprasta GUI. Pastaba: paleiskite „Arduino“serijinį monitorių, kai veikia
Centro skyriaus keitimas: 5 žingsniai (su paveikslėliais)
Keisti centro sekciją: atjungiau laidus nuo centrinės baterijos dalies, kad būtų lengviau dirbti. Tada aš naudoju pakopinį grąžtą arba „Unibit“, kad gręžčiau akumuliatoriaus skyriaus kaištį. Tikriausiai galėtumėte naudoti įprastą grąžtą, jei būsite atsargūs. Nenorėjau c
„Pasidaryk pats“PCB gamyba naudojant UV spausdintuvą (ir gaukite pagalbos iš vietinio prekybos centro): 5 žingsniai
„Pasidaryk pats“PCB gamyba naudojant UV spausdintuvą (ir gaukite pagalbos iš vietinio prekybos centro): norite pagaminti PCB, bet nenorite laukti savaičių iš Kinijos. „Pasidaryk pats“atrodo vienintelė galimybė, tačiau iš patirties žinai, kad dauguma variantų yra nepatogūs. Dažų perkėlimas niekada neišeina, ar ne? Fotolitografija namuose yra labai sudėtinga
Centro De Cómputo Para Niños Con Raspberry Pi: 7 žingsniai
„Centro De Cómputo Para Niños Con Raspberry Pi“: „Estos ser á n los primeros pasos de la Raspberry Pi y para elloceces“: „Raspberry Pi 2“, pritaikytas raudonam ir „micro USB Tarjeta micro SD“(8 GB) kabeliui HDMI „Cargador Rat“ir „Teclado para“computadoraEn caso de contar con un Kit de inicio
Žiniasklaidos centro sprendimas, kurį naudos net žmona ir vaikai .: 9 žingsniai
Žiniasklaidos centro sprendimas net žmonai ir vaikams. Tai nėra PVR ir neleidžia įrašyti ar pristabdyti tiesioginės televizijos, nors aš pasiūlysiu gerą alternatyvą