Cov txheej txheem:
- Kauj ruam 1: Configurando O Ambiente
- Kauj ruam 2: WebSocket
- Kauj Ruam 3: Escrevendo O Servidor
- Kauj Ruam 4: Testando O Servidor
- Kauj Ruam 5: Aplicação Mobile
Video: Pequeno Projeto De Uma Casa Inteligente: 5 Kauj Ruam
2024 Tus sau: John Day | [email protected]. Kawg hloov kho: 2024-01-30 09:24
O projeto que faremos é de uma casa inteligente. Possui basicamente dois grupos de funcionalidades: · De monitoramento de iluminação e temperatura dos cômodos.
· Txheeb xyuas cov npe ntawm cov khoom noj thiab nível de água filtrada na geladeira.
Não escreveremos os firmwares dos dispositivos IoT da geladeira nem dos cômodos; porém assumiremos que os dispositivos fazem o seguinte:
- A geladeira possui um dispositivo com touchscreen em que é possível entrar com dados de alimentos: o nome de um alimento e sua quantidade;
- Cov geladeira possui um sensor de nível em um pequeno tanque de água embutido na geladeira;
- Os cômodos têm termômetros e sensores de iluminância;
- Ua raws li cov lus pom zoo los ntawm kev txuas wifi;
- Raws li lâmpadas dos cômodos podem ter o brilho ajustado por dispositivo que se comunica pela rede wifi;
Xav tau:
- Ua kom zoo dua li nab nab, javascript, siv los ua haujlwm ua haujlwm, comandos básicos tsis muaj plhaub
- Kev teeb tsa: nodejs, nab hab sej
- Kev teeb tsa (xaiv): docker, emulador de dispositivo mobile, gerenciador de sdk rau Android (tsis muaj Android Studio)
Nws yog qhov khoom plig zoo tshaj rau kev siv rau Linux. Txhawm rau hloov kho cov kev hloov pauv rau lub khoos phis tawj Windows.
Kauj ruam 1: Configurando O Ambiente
Vamos configurar o ambiente de desenvolvimento em 2 partes: servidor e mobile. O servidor será escrito em python e o mobile em javascript ou typescript, sendo utilizado React Native para o projeto.
reactnative.dev/
Vamos inicialmente criar uma estrutura de pastas. Em um diretório escolhido (que a partir de agora será escrito semper como $ PROJECT_DIR como placeholder - crie com no local que achar mais adequado e com o nome de sua preferência), vamos criar uma pasta "servidor":
$ mkdir $ PROJECT_DIR && cd $ PROJECT_DIR
$ mkdir tus neeg siv
CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO PARA O SERVIDOR
Podemos utilizar um ambiente conteinerizado com Docker ou ambiente virtual nab hab sej (venv). Caso deseje utilizar ambiente conteinerizado, criaremos a imagem segundo o dockerfile:
$ cd $ PROJECT_DIR
$ kov dockerfile
Xaiv lub dockerfile.
Caso prefira utilizar ambiente virtual ua nab hab sej, raws li instruções em
Vamos então criar o arquivo que persistirá a lista de dependências do servidor e colocar as dependências necessárias:
$ kov xav tau.txt
Veja imagem ua requirements.txt.
Caso tenha optado por utilizar um ambiente conteinerizado, tsim cov duab thiab tsis muaj ntim:
$ docker tsim. -t smarthouse $ docker khiav -it -p 3000: 3000 -v $ (pwd):/app smarthouse bash
Para mais informações sobre o dockerfile e cli do docker:
CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO MOBILE
Um passo a passo de como configurar o ambiente de desenvolvimento mobile com React Native pode ser visto tsis muaj qhov txuas:
Após ter o ambiente configurado, na pasta do projeto deve ser possível executar o comando para criar aplicação mobile:
$ npx create-react-native-app client
Kauj ruam 2: WebSocket
Ress interessante que o leitor conheça pelo menos um pouco a respeito de websocket antes de prosseguir. Caso o leitor nunca tenha lido, trabalhado ou ouvido falar nada a respeito, separe alguns minutos para entender como funciona o websocket através da documentação:
developer.mozilla.org/pt-BR/docs/WebSocket…
Usaremos uma biblioteca no cliente e no servidor que abstrai o protocolo de maneira que não precisemos pensar em detalhes de chamada e de armazenamento de identificadores e rotas. Separe também um tempo para estudar as bibliotecas utilizados no cliente e no servidor:
Cov neeg siv khoom:
Cov neeg siv:
Kauj Ruam 3: Escrevendo O Servidor
Vamos criar uma estrutura inicial do projeto e escrever a interface que será utilizada como comunicação com o servidor:
$ mkdir cov
$ kov app.py src/{maub los, qhov txuas txuas}.py
Primeiramente vamos escrever um módulo de inicalização do servidor:
Saib cov duab hauv app.py
Depois vamos escrever o módulo que buildelece as conexões via websocket e as redirecionam para um controlador.
Siv cov duab ua socketconnection.py
CONTROLLER E USECASES
O controlador receberá um pacote do módulo responsável por buildelecer e gerenciar as conexões; será responsabilidade do controlador saber qual função de caso de uso chamar para cada envento recebido, bem como a partir da resposta do caso de uso enviar um pacote de resposta para a sala room de dispositivos conectados para atualização das informações.
Xaiv cov duab ua controller.py.
Finalmente temos os casos de uso que devem gerenciar como deve ser tratado os dados do evento recebido e criar os novos dados a partir do dados recebidos para que o controlador atualize o estado do sistema. Tsis muaj caso desse sistema há somente atualização de valores (sejam numéricos, texto ou booleanos - tsis muaj caso de ligar/desligar dispositivos de ambientação). Então não é de surpreender que os casos de uso tão somente chame funções do módulo responsável pela persistência de dados como se fosse essa a "regra de negócio".
Siv cov duab ua usecases.py
Nota: precisamos persistir os dados de alguma forma. Fica a escolha do leitor como prefere armazenar os dados e portanto, implementar as funções do src/repository.py. Tsis muaj kev tshaj tawm desenvolvido como exemplo foi persistido em um arquivo json no diretório database. Tsis muaj qhov chaw khaws cia ua cov ntawv pov thawj pov thawj tseeb uma pasta server/database com um arquivo com os dados persistidos bem como um arquivo de modelo em server/database-model.json de como deve ser o json para a nossa aplicação funcionar.
Kauj Ruam 4: Testando O Servidor
Podemos criar um script para conectar ao servidor e enviar eventos conforme a estrutura esperada pelos controladores para fins de testes manuais. Vamos criar esse script e rodá-lo com o servidor*.
Siv cov duab ua serverclient.py
Com o arquivo criado, txheeb xyuas qhov ntim ntawm está rodando, e dentro dele ua:
$ sej app.py
Rau lub thawv, tsis muaj diretório $ PROJECT_DIR/server ua tiav:
$ python3 serverclient.py
Tsis muaj tam sim ">" digite os eventos encontrados tsis muaj controlador seguido de ";" e então valores de identificação e/ou novos valores. Piv txwv li:
UPDATE_FRIDGE_WATER_LEVEL; 80
UPDATE_ROOM_TEMPERATURE; 1, 22.0
UPDATE_ROOM_TEMPERATURE_SETPOINT; 1, 17.5
UPDATE_ROOM_LUMINOSITY; 100
UPDATE_ROOM_LUMINOSITY_SETPOINT; 0
TOGGLE_ROOM_TEMPERATURE; 1
TOGGLE_ROOM_LIGHT; 1
E para cada evento enviado verifique se foi persistido no banco de dados escolhido.
Nota: txheeb xyuas que a porta que está sendo servido aplicação, a porta exposta no docker run e a porta do script de teste devem ser a mesma.
Kauj Ruam 5: Aplicação Mobile
Não será demonstrado com muitos detalhes cada parte do desenvolvimento do cliente mobile. Não será explicitado aqui cada importação no módulo tus thawj coj criado pelo React Native nem possíveis detalhes de configuração. Txhawm rau kom ua tiav, navegue tau txais $ PROJECT_DIR/cov neeg siv khoom adicione a dependência que precisaremos para o projeto:
$ npm i socket.io
Em seguida vamos escrever os componentes gráficos e as funções que irão se comunicar com o servidor.
ESCREVENDO TELA
Em App.js, vamos escrever os componentes de GUI.
⚠ Nco tseg tias muaj kev lom zem zoo nkauj siv qhov cuam tshuam ainda não foi escrita! Também não foram escritos os reducers setDataReducer, setFoodReducer, setTemperatureReducer, setLightReducer thiab nem escritos os objetos com estados iniciais INITIAL_STATE, INITIAL_FOOD_MODAL, INITIAL_TEMPERATURE_M
Também ainda não foram escritas as funções utilizadas pelos elementos de inteface gráfica para fazer chamadas para escrita no servidor: saveNewFoodValue, saveNewTemperature, saveNewLuminosity, toggleTemperatureForRoom, toggleLightForRoom
Portanto, se desejar testar os elementos com dados falsos, escreva cada objeto e função dito acima.
Siv cov duab ua App.js com código da parte GUI
Por fim vamos escrever as funções necessárias para fazer a comunicação com o servidor e para utlização do mesmo pelos componentes de GUI.
Siv cov duab ua App.js com código da parte lógica/operacional
Pom zoo:
Arduino Tsheb Rov Qab Chaw Nres Tsheb Ceeb Toom - Cov Kauj Ruam ntawm Kauj Ruam: 4 Kauj Ruam
Arduino Tsheb Rov Qab Chaw Nres Tsheb Ceeb Toom | Cov kauj ruam ib kauj ruam: Hauv txoj haujlwm no, kuv yuav tsim qhov yooj yim Arduino Tsheb Rov Qab Tsheb Nres Tsheb Nres Sensor Siv Arduino UNO thiab HC-SR04 Ultrasonic Sensor. Qhov no Arduino raws Lub Tsheb Rov Qab ceeb toom tuaj yeem siv rau Kev Tshawb Fawb Txog Tus Kheej, Robot Ranging thiab lwm yam
Tsev Automation Kauj Ruam ntawm Kauj Ruam Siv Wemos D1 Mini Nrog PCB Tsim: 4 Kauj Ruam
Tsev Automation Kauj Ruam Ib Leeg Siv Wemos D1 Mini Nrog PCB Tsim: Tsev Automation Kauj Ruam los ntawm Kauj Ruam siv Wemos D1 Mini nrog PCB Tsim cov tub ntxhais kawm ntawv qib siab. Tom qab ntawd ib tus ntawm peb cov tswv cuab tuaj
RC Taug Qab Neeg Hlau Siv Arduino - Kauj Ruam Ib kauj ruam: 3 Kauj Ruam
RC Tracked Robot Siv Arduino - Kauj Ruam Ib Nrab: Hav guys, Kuv rov qab los nrog lwm tus neeg hlau txias chassis los ntawm BangGood. Vam tias koj tau dhau los ntawm peb cov phiaj xwm yav dhau los - Spinel Crux V1 - Tus Cwj Pwm Tswj Tus Neeg Hlau, Spinel Crux L2 - Arduino Xaiv thiab Muab Neeg Hlau nrog Robotic caj npab thiab Badland Braw
Kawm Yuav Ua Li Cas Kos Tus Tswm Ciab - Kauj Ruam Ib Kauj Ruam: 6 Kauj Ruam
Kawm Yuav Ua Li Cas Thiaj Li Tswmciab - Kauj Ruam Ib kauj ruam: Cov tswm ciab no siv sijhawm 10 feeb los kos yog tias koj ua raws kuv cov kauj ruam ua tib zoo
Casa Inteligente Com Arduino: 6 Kauj Ruam
Casa Inteligente Com Arduino: Esse projeto é uma junção de vários pequenos projetos que podem ser feitos com Arduino. É um ótimo projeto para quem está começando no mundo do Arduino.Você vai aprender a fazer um sistema com medição de temperatura e umidade, alarme, acendimento de