INHOUDSOPGAWE:
- Stap 1: Gebruik hardeware
- Stap 2: Montagem Do Hardware
- Stap 3: Firmware Atmega328
- Stap 4: Programação Em Python
- Stap 5: Configurando O Web Service
Video: Gereelde automatiese weergawes van webdienste Gebruik Python: 5 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Ons kan nie meer die stelsel monitor vir die plantações nie, maar ook vir die relatiewe druk, die atmosfeer, die temperatuur, die UV, die ventilasie en die toestand van die plant (seca/molhada). Ons kan ook 'n aantal plaaslike dienste gebruik, maar ook 'n aantal dienste wat deur die webdiens gemaak kan word, is 'n meteorológica (geen caso, estamos utilizando en da Faculdade de Engenharia de Sorocaba). Aanvullende inligting oor ons webwerf kan op ThingSpeak aangewend word.
Stap 1: Gebruik hardeware
Dit kan gebruik word vir die konstruksie van die volgende projekte:
1x Qualcomm Dragonboard 410c
1x Grove Seeed Sensor Mezzanine
1x Watersaag sensor
1x IMU 10OF Grove Sensor v1.0
1x Sunlight Grove Sensor v1.0
1x USB -muis
1x Teclado USB
1x monitor
1x Cabo HDMI
1x Adaptador HDMI-VGA
Acesso à dados da estação meteorológica FACENS
Stap 2: Montagem Do Hardware
As u 'n sensor -mezzanine op 'n draakbord kan plaas, kan u 'n ligação de acordo com esquemático anterior uitvoer:
1: Inleiding tot die sensor van Groove Sunlight v1.0.
2: +5V aansluiting oa Vcc tot IMU-10DOF.
3: +5V e Gnd conectados aos pinos correspondentes do Watersensor.
4: GND IMU-10DOF.
5: SDA/SCL kan ook korrespondente doen met IMU-10.
6: Pino Sig do Water sensor conectado ao pino 2.
Stap 3: Firmware Atmega328
Através da Sensors Mezzanine, moontlik om mikrokontroleur Atmega328 te gebruik, kan ook gebruik word in platformate Arduíno, en program-lo diretamente, gebruik en IDE-installasie van DragonBoard. Dit is moontlik om 'n mezzanine en 'n DragonBoard te gebruik, wat ook 'n noodsaaklike funksie vir 'n program en 'n hardeware vir mikrobestuurders bevat.
U kan 'n firmware -antwoord op die werklike wyse opspoor as sensore, algemene kommunikasie- en operasieprotokolle, sowel as 'n aangepaste kennis oor ons, en ons kan dit via seriële seremonies vir DragonBoard gebruik.
*Dit is noodsaaklik om 'n bybelboek te gebruik wat geen firmware bevat nie. Ons kan die volgende insluit:
imu-10DOF
Sonlig sensor
Die firmware wat u kan gebruik, is:
Stap 4: Programação Em Python
Para o programa criado, foram needsários os seguintes imports: 'urllib2', 'json', 'time', 'serial', 'paho.mqtt.publish', 'psutil' e 'desimal'. Foram definidos duas funções ('comJSON' e 'semJSON') que serão explicadas mais tarde.
import urllib2, json #para pegar os dados da estacaoimport time #para o time.sleep () import serial #para o Arduino import paho.mqtt.publiseer as publiseer #par publicar import psutil #para configurar of url invoer desimaal #par converter
O primeiro passo é gravar em uma variável of endereço de onde serão obtidos os dados da Estação Meteorológica (no caso estamos gravando na variável 'url'). Ons kan ook via JSON (in 'n posição mais recente da Array será a 49, inicializamos 'i' como) 49) e 'j' para contar quantas vezes o código já rodou.
url = "https://www.fieldclimate.com/api/CIDIStationData/GetLast?user_name=facens&user_passw=clima&station_name=002035C0" #Defineer of URL vir estação
i = 49 #Para pegar os dados mais atuais da estação
j = 0 #Passo do programa
Entrando no 'while (1)', inicializamos a variável 'jsonurl' como 'None'. U kan ook 'n URL JSON gebruik om 'n amptelike inskrywing te maak, maar dit kan nie herhaal word nie. Ons kan ook gebruik maak van 'n URL wat gebruik kan word as 'urllib2.urlopen (url)', en ons kan ook die argument 'time -out = X' gebruik, maar ons kan dit ook vir 'n aantal limiete vir 'n URL -adres stuur. As u 'n URL kan gebruik, kan u 'n tempo neem om 'n time -out uit te voer, of om 'n funksie van 'comJSON' te maak. Ons kan nie 'n URL gebruik om 'n tempo te voltooi nie, maar dit kan 'n funksie van 'semJSON' wees. Ambos as funções são muito parecidas, tendo como diferença os dados da estação ('comJSON' irá mostrar e enviar os dados da estação, enquanto 'semJSON' não). As 'semJSON' kan u 'comJSON' aflei. Iremos verduidelik 'n 'comJSON'
terwyl (1): jsonurl = Geen #Inisialiseer 'n variëteit in Geen druk 'Passo:', j druk 'Atualizando dados' probeer: jsonurl = urllib2.urlopen (url, timeout = 5) #tenta abrir o url em no máximo 5 segundos as jsonurl nie Geen is nie: druk 'Dados atualizados' comJSON (jsonurl) #Sien 'n volledige URL, maar dan is dit nie: as jsonurl Geen is: druk 'Erro ao atualizar dados' semJSON () #Se não abriu o URL, mostra os dados obtidos localmente (do Arduino) slaag j += 1 druk '---------------------------------- -------------------------------------------------- -------------------------------------------- / n 'tyd. slaap (1)
Na primira linha da função 'comJSON', kan u ons ook die URL van die adres já abertos numa variável 'dados' noem. Esta irá recemb um objeto com duas Arrays, das quais iremos somente usar uma ('ReturnDataSet'). Realizada esta operação, iremos então inicializar o Serial do Arduíno e ler as linhas (readline ()) que o Arduíno está imprimindo e jogando as Strings convertidas dentro de variáveis e, então, mostrando esses dados na tela. Ons kan ons ook herken, maar ons kan dit ook doen, maar ons kan ons ook 'dados' gebruik (byvoorbeeld '[' ReturnDataSet '] [' sens_aver_6_5] ').
def comJSON (jsonurl): #envia todos os dados dados = json.loads (jsonurl.read ()) #carrega os dados JSON da página já aberta #Arduino ard = serial. Serial ('/dev/tty96B0', 115200) # inicializa a variavel que receberá os dados do Arduíno #Recebe os dados do Arduíno ardAgua = int (ard.readline (). rstrip ()) ardTemp = float (ard.readline (). rstrip ()) ardPres = int (ard.readline ().rstrip ()) ardUV = float (ard.readline (). rstrip ())
druk "\ nArduino"
as ardAgua == 1: druk 'Molhado' anders: druk 'Seco' druk 'Tempera:', ardTemp, '*C' druk 'Pressao:', ardPres, 'Pa' druk 'Ultra-Violeta:', ardUV, ' lx '
#Estacao
print '\ nJSON' print 'URL:', jsonurl #Recebe os dados da estação data = dados ['ReturnDataSet'] ['f_date'] vel_vento = dados ['ReturnDataSet'] ['sens_aver_6_5'] umidade = dados ['ReturnDataSet'] ['sens_aver_19_507']
druk 'Data:', data
druk 'Velocidade do Vento:', vel_vento, 'm/s' print 'Umidade do ar:', umidade, '%'
#Omskakel
vel_vento = desimaal. Desimaal (vel_vento.rstrip ()) umidade = desimaal. Desimaal (umidade.rstrip ())
O próximo passo é enviar todos esses dados coletados. Para isso, preciesamos colocar a ID do canal, a Chave de Escrita e o Host em variáveis, além de configurar o useUnsecuredTCP, useUnsecuredWebsockets e useSSLWebsockets (usamos True, False, False). Criamos mais uma variável que irá guardar o 'caminho' para o canal, e uma outra para guardar, em String, o que será enviado para o servidor (com todas as variáveis convertidas) and então tentar publicar os dados no servidor usando 'publish. single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) '. 'N Função então acaba e retorna para o loop principal.
#Envia channelID = "344243" #Canal criado para o grupo apiKey = "1PK9ELK0L4AH8CVP" #Código dado pelo ThingSpeak mqttHost = "mqtt.thingspeak.com" #configurações de comunicaUsecuredSecUnsUnsCurnsPecUnsSecUnsUnsUnsUnsUnsUnsUnsUnsUnsUnsUnsUnsCurnsUnsUnsUnsCurContsUnSecUnsSecUnsUnsUnsCurseWornsUsSecUnTecSecUtSecUtSecUtSecUtSecUtSecUtSecUtSecUtSecUsSecUtSecUtUsSecUtSecUtSecUtSecUtSecUtSConSecUtUnSecUtSecUtSecUsUsTecSecUsUsUtSecUtUsUsUtSecUtUsE "tcp" tPort = 1883 tTLS = Geen indien useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = Geen indien useSSLWebsockets: invoer ssl tTransport = "websockets" tTLS = {'ca_certs': "/etc/ssl/certs/ca- certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channels/" + channelID +"/publish/" + apiKey #Cria variavel com 'caminho' para o kanaal tPayload =" field1 = " + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade) #Organiza todas as variaveis em uma String para ser enviado print 'Enviando dados' try: publish.single (topic, payload = tPayload, hostname = mqttHost, port = tPort, tls = tTLS, transport = tTransport) #Envia os dados time.sleep (0.5) print 'Dados enviados' behalwe: print 'Erro ao enviar dados'
Stap 5: Configurando O Web Service
Vir ons kan u ook 'n webdiens gebruik, soos ThingSpeak. In die eerste plek, geen webwerf thingspeak.com of 'n webwerf nie. As u 'n aanmelding benodig, kan u ook die menus kies -> Canais -> Meus Canais en 'clicamos no botão' Novo Canal '. U kan ook 'n kliek, 'n naam of 'n kanaal, 'n bespreking van 'n beskrywing van 'n paar e -posse, en ook 'n groot aantal van 8 kampusse wat ons gebruik kan gebruik. Geen gebruik nie, 7.
Ao criar um canal, é gerado um ID do Canal, uma Chave de Escrita en uma Chave de Leitura. O ID to Canal se encontra abaixo do nome do canal e a Chave de Escrita na aba "Chaves". Vir Python kan ons inligting verstrek oor die kanaal, wat nodig is vir 'n ID vir Canal:
channelID = "Insira o ID to Canal aqui"
E também met Chave de Escrita:
apiKey = "Insira a Chave de Escrita"
Além da conexão com of canal criado, dit is ook noodsaaklik vir die konfigurasie van die Python -app.py:
useUnsecuredTCP = Waar
useUnsecuredWebsockets = FalseuseSSLWebsockets = Valse mqttHost = "mqtt.thingspeak.com" as useUnsecuredTCP: tTransport = "tcp" tPort = 1883 tTLS = Geen indien useUnsecuredWebsockets: tTransport = "websockets" tTortSlTTSSS = tSTLSTS = TTSLTSTSST = TTSLTSTSSTSSTSSTSTS = ifsTransportsTsTransportsTransports websockets "tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt ", 'tls_version': ssl. PROTOCOL_TLSv1} tPort = 443 topic =" channel/" + channelID +"/publish/" + apiKey
As voorbeeld kan ons 'n werklike webwerf gebruik, byvoorbeeld deur temperatuur van die kampus 2 ('n temperatuur in die kamer), 'n noodsaaklike aanduiding van "veld2 ="+veranderlike temperatuur
tPayload = "field1 =" + str (ardAgua) + "& field2 =" + str (ardTemp) + "& field3 =" + str (ardPres) + "& field4 =" + str (ardUV) + "& field5 =" + str (data) + "& field6 =" + str (vel_vento) + "& field7 =" + str (umidade)
Ons kan ook 'n program vir Python doen, sowel as 'n uitvoerende funksie vir ons webdiens. No ThingSpeak, dit is moontlik om die grafiek te monitor.
Aanbeveel:
Hoe om servomotors te gebruik met behulp van Moto: bit met mikro: bit: 7 stappe (met foto's)
Hoe om servomotors te gebruik met behulp van Moto: bit met Micro: bit: Een manier om die funksionaliteit van die micro: bit uit te brei, is deur 'n bord genaamd moto: bit van SparkFun Electronics (ongeveer $ 15-20) te gebruik. Dit lyk ingewikkeld en het baie funksies, maar dit is nie moeilik om servomotors daaruit te laat loop nie. Moto: bit laat jou toe om
AUTOMATIESE TEMPERATUURVERGOEDING VAN ATLAS SE GELEIDINGSSENSOR: 4 stappe
AUTOMATIESE TEMPERATUURVERGOEDING VAN ATLAS se GELEIDINGSSENSOR: In hierdie projek vergoed ons die geleidingsensor van Atlas Scientific outomaties. Temperatuurveranderinge het 'n invloed op die geleidingsvermoë/totale opgeloste vaste stowwe/soutgehalte van vloeistowwe en deur dit te vergoed, word ons verseker
UV-C ontsmettingsboks-handleiding vir basiese weergawes: 11 stappe (met foto's)
UV-C ontsmettingsboks-handleiding vir basiese weergawes: deur Steven Feng, Shahril Ibrahim en Sunny Sharma, 6 April 2020 Spesiale dank aan Cheryl vir die waardevolle terugvoer Vir die Google Doc-weergawe van hierdie instruksie, sien https://docs.google. com/document/d/1My3Jf1Ugp5K4MV … Waarskuwing UV-C-lig
OPSOMMING VAN AUTOMATIESE LIGBRON MET ARDUINO UNO R3: 5 stappe
AUTOMATIESE LIGBRONVOERING MET ARDUINO UNO R3: In hierdie les gebruik ons 'n servomotor, 'n fotoresistor en 'n aftrekweerstand om 'n outomaties opspoorbare ligbronstelsel saam te stel
AUTOMATIESE PILLERDISPENSER: 14 stappe (met foto's)
AUTOMATIESE PILLEDISPENSER: Dit is 'n pil -dispenser -robot wat die pasiënt die regte hoeveelheid en tipe medisyne -pille kan voorsien. Die dosering van die pil word outomaties uitgevoer op die regte tyd van die dag, voorafgegaan deur 'n alarm. As dit leeg is, word die masjien maklik hervul