Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

“É para os pássaros!”

Componentes e suprimentos

Arduino 101
× 1
Intel Edison
× 1
Logitech c270 HD Webcam
× 1
Pololu Carrier com sensor de distância digital Sharp GP2Y0D815Z0F de 15 cm
× 2
Adafruit Square Force-Sensitive Resistor (FSR) - Interlink 406
× 1
Placa de interrupção do sensor de temperatura e umidade Adafruit Si7021
× 1
Seeed Grove Start Kit Plus, Intel IoT Edition
× 1
Capacitor 47 µF
× 2
Resistor 1k ohm
× 1
Bloco de terminais Adafruit - 2 pinos 3,5 mm - pacote de 5 !
× 1
Fonte de alimentação de comutação compacta Adafruit - Saída selecionável 3-12VDC
× 1
Adafruit Perma-Proto placa de ensaio PCB de tamanho quarto - Única
× 1
Fios de jumpers (genérico)
× 1

Ferramentas e máquinas necessárias

Impressora 3D (genérica)
Ferro de soldar (genérico)

Aplicativos e serviços online

Intel XDK para IoT
Autodesk Fusion 360
PubNub Publish / Assine API
Cloudinary
noble.js

Sobre este projeto





“É para os pássaros!” Reinventando o futuro do monitoramento ecológico com o Arduino 101





Introdução e motivação:


Uma forma de medir a saúde de nosso clima e do ecossistema em que vivemos é medindo o tamanho e a variedade de sua fauna ou população animal. Todo inverno, desde 1987, o Laboratório Cornell de Ornitologia conduz um grande esforço de ciência cidadã chamado Projeto FeederWatch:

“O Projeto FeederWatch é uma pesquisa de inverno de pássaros que visitam alimentadores em quintais, centros naturais, áreas comunitárias e outros locais na América do Norte ... Os dados do FeederWatch mostram quais espécies de pássaros visitam alimentadores em milhares de locais em todo o continente a cada inverno . Os dados também indicam quantos indivíduos de cada espécie são vistos. Essas informações podem ser usadas para medir as mudanças nas faixas de inverno e na abundância das espécies de pássaros ao longo do tempo. ”

Este é nosso primeiro ano de participação e queríamos combinar nosso interesse em fazer e hackear, com nosso interesse pela natureza e nossa participação no Projeto FeederWatch. Portanto, decidimos reinventar nosso futuro de observação de pássaros e monitoramento ambiental com o Arduino 101!

O Arduino 101 é ideal para este projeto porque combina a simplicidade do Arduino IDE para facilitar a nossa programação embarcada, recursos integrados como Bluetooth LE com uma grande variedade de sensores e breakout boards prontamente disponíveis. Incorporando um Arduino 101 em um alimentador de pássaros caseiro, desenvolvemos uma plataforma experimental para medir os parâmetros climáticos e monitorar a atividade das aves em nosso alimentador. Adicionar algumas tecnologias interessantes de IoT da Cloudinary e PubNub nos ajudou a reinventar o futuro do monitoramento ambiental e de saúde do ecossistema!





Visão geral do projeto:


O coração do nosso projeto é um Arduino 101 embutido em um alimentador de pássaros caseiro. Usamos 2 sensores de distância infravermelhos Sharp para detectar pássaros empoleirados em uma cavilha de madeira em ambos os lados do comedouro. Um resistor sensível à força (FSR) é usado para detectar a quantidade de semente presente no alimentador. Uma placa de fuga do sensor de temperatura e umidade Adafruit Si7021 é anexada aos pinos i2c e é usada para fornecer nossos dados meteorológicos físicos. O Arduino 101 é configurado para atuar como um dispositivo periférico BLE e enviar dados desses sensores por BLE para uma central BLE dispositivo. A alimentação é fornecida por 4 baterias AA. Todos esses componentes estão alojados em um gabinete impresso em 3D personalizado.

Usamos um Intel Edison no Arduino Breakout Board tanto como central BLE quanto como gateway de internet. Uma webcam usb logitech c270 é conectada à porta usb na placa e usada para tirar fotos quando uma notificação BLE é recebida, indicando atividade em um dos poleiros. Essas imagens são armazenadas localmente em um cartão SD inserido no slot de cartão SD na placa de breakout.

Aproveitamos a capacidade WiFi do Intel Edison para usá-lo como um gateway de internet. Isso nos permite usar super tecnologias, como PubNub para streaming de dados em tempo real e Cloudinary para armazenamento e manipulação de imagens na nuvem.

O comedouro de pássaros é feito de uma garrafa de refrigerante vazia e um tarugo de madeira e pendurado em um poste em nosso quintal.





Construindo o projeto:


Arduino 101, o alimentador de pássaros integrado.

A base deste projeto é um Arduino 101 embutido em nosso alimentador de pássaros. O comedouro de pássaros ficará ao ar livre e precisará ser capaz de suportar os rigores físicos de estar ao ar livre. Será necessária uma forma de transmitir dados em tempo real e sem fio. A distância entre o Arduino 101 de transmissão e o Edison de recepção é de apenas alguns metros e, como o Arduino 101 já tem BLE a bordo, usaremos BLE!

A maior parte do circuito pode ser construída seguindo o diagrama de fritzing, mas houve alguns desafios que encontramos ao fazer e testar este circuito. É neles que nos concentraremos aqui:
  • O primeiro desafio:Detectar um pássaro no comedouro, ao ar livre! Para este projeto, precisamos de um sensor que funcione ao ar livre, vedado contra os elementos. Não queremos perturbar ou assustar o assunto. Deve detectar apenas o que está no poleiro. Depois de avaliar as características de vários sensores, decidimos usar o Pololu Carrier com o sensor de distância digital Sharp GP2Y0D815Z0F. Esses sensores, ao contrário dos sensores PIR regulares, têm um alcance de detecção muito curto. Queremos apenas saber se um pássaro está empoleirado a alguns centímetros do sensor. Os sensores PIR têm uma faixa de detecção muito longa e ampla. Isso é ótimo para detectar qualquer tipo de movimento na garagem de sua casa, mas não queremos detectar galhos de árvores ou outro "ruído" sempre que o alimentador de pássaros balançar com a brisa. Além disso, uma rápida avaliação da bancada mostrou que os sensores Sharp IR funcionavam quando colocados dentro de uma garrafa de refrigerante de plástico. Isso é importante porque precisamos proteger os componentes eletrônicos dos elementos e sermos capazes de “ver através” desta parte do gabinete.
  • O segundo desafio:depois de conectar um dos sensores e testá-lo, estávamos prontos para começar! Portanto, conectamos um segundo sensor Sharp IR ao Arduino 101 e. . . eles não funcionaram! Depois de verificar o código, várias vezes. Depois de verificar algumas placas e sensores diferentes, nada faria esses dois sensores funcionarem juntos. Assim, enfrentamos nosso primeiro grande desafio. Devemos tentar um tipo diferente de sensor? Devemos fazer um único alimentador de pássaros poleiro (coxo!), O que fazer? Em desespero, fizemos o que deveríamos ter feito da primeira vez:verifique o site e, nas perguntas frequentes do produto, encontramos o seguinte: Este sensor não está se comportando como eu esperava:estou recebendo muita detecção intermitente além do alcance máximo do sensor e não está detectando objetos dentro do alcance de detecção anunciado. O que há de errado? Problemas como esse podem ser o resultado de problemas com a fonte de alimentação, especialmente porque este sensor consome energia em pequenas e grandes rajadas, portanto, certifique-se de que sua fonte de alimentação seja capaz de fornecer a corrente necessária. Se você tiver esse problema, tente adicionar um capacitor de 10 µF ou mais na alimentação do sensor e aterramento próximo ao sensor; isso compensa uma fonte de alimentação inadequada e normalmente restaura a funcionalidade normal. Problema resolvido! Nós adicionamos um capacitor eletrolítico de 47uF a cada um dos sensores e eles funcionaram, com apenas mais uma advertência, eles precisavam ser alimentados diretamente do pino de + 5V na placa. Você verá isso no diagrama de fritzing como um jumper do Linha de + 5 V de um sensor para a alimentação de + 5 V para o outro sensor. Não somos EEs, então não posso explicar isso, é apenas o que descobrimos para funcionar dentro e fora de casa!
  • O terceiro desafio:na seção Atividades relacionadas e aprendizagem do site do Projeto FeederWatch, uma das atividades recomendadas é pesar a semente do pássaro em seu alimentador antes e depois de cada contagem e calcular a quantidade de semente ingerida. Após várias contagens, calcule a taxa média de consumo. Em vez de realizar pesos manuais, por que não capturar o consumo de sementes de forma automatizada? Nossa solução foi usar um resistor sensível à força (FSR). Este é um resistor com uma resistência que varia com a força aplicada a ele. Ele pode ser conectado a um pino de entrada analógica. Mas seria sensível o suficiente para detectar mudanças nas quantidades de sementes? Nossas primeiras tentativas de medir os níveis de sementes em um pequeno recipiente de plástico não tiveram muito sucesso. O sensor respondeu bem à pressão variável do dedo, mas não aos níveis de sementes. Portanto, fizemos duas alterações para resolver o problema. Primeiro, o sinal analógico é entregue ao pino analógico do Arduino 101 por meio de um divisor de tensão de 2 resistores, sendo um o FSR e o segundo um resistor convencional. Baixamos o valor deste segundo resistor e o sensor parecia ser mais sensível ao toque, mas ainda não respondia às mudanças iniciais como gostaríamos. Então, acrescentou uma mudança de hardware a tudo isso. Algo por analogia com o princípio de Pascal, se em vez de aplicar o peso das sementes sobre toda a superfície do FSR, criemos uma plataforma com um pequeno ponto de contato em seu centro, aumentaríamos muito a força da semente no FSR. Exatamente o oposto de um sapato de neve e funcionou!

Outro pequeno desafio é conectar o FSR ao Arduino 101 de maneira segura e confiável. Isso é facilmente resolvido com o uso de blocos de terminais de 2 pinos de 3,5 mm. Apenas certifique-se de que o espaçamento do bloco de terminais corresponda ao da sua placa.

O resto do hardware do Arduino 101 é simples. Conectamos a placa breakout Adafruit Si702 aos pinos do barramento I2C () e usamos + 3,3 V vazio para alimentação. A alimentação de todo o pacote é fornecida por um pacote de bateria comutável 4XAA alojado embaixo do gabinete principal.

Soldamos os sensores IR e FSR a placas de circuito impresso do tamanho de um quarto de PCI da Adafruit Perma-Proto e os fixamos na parte inferior do Arduino 101 com fita dupla-face. Todo o pacote é colocado dentro do alimentador de pássaros da garrafa de refrigerante e sobreviveu a temperaturas de congelamento abaixo de zero, neblina, chuva leve e neve (falsa nevasca ‘Stella’!).

Arduino 101 Sketch:

A principal tarefa do esboço é monitorar os sensores conectados e relatar os valores dos sensores no BLE. Todos os dados em BLE são transmitidos como um pacote de bytes. Se seus dados originais são um float interno de array de char, você terá que dividi-los em sua representação de bytes para transmitir por BLE. A maneira mais fácil que conheço de fazer isso é criar uma união de tipos de dados. Uma união nos permite compartilhar o mesmo local de memória entre dois tipos de dados diferentes. Em nosso caso, o sensor de temperatura e umidade SI7021 fornece dados como um número de ponto flutuante. A linguagem Arduino C representa um float como 4 bytes, então criamos uma união entre nosso float de temperatura e float de umidade e um array de 4 bytes.
  / ** * A diretiva union permite que essas variáveis ​​compartilhem o mesmo local de memória. Consulte o tutorial * meu tutorial Imu to You! (Https://www.hackster.io/gov/imu-to-you-ae53e1?team=18045) para obter mais * uma discussão sobre o uso da diretiva sindical em C. * / união {float t; bytes de caracteres não assinados [4]; } tempData; união {float h; bytes de caracteres não assinados [4]; } umidadeData; união {int f; bytes de caracteres não assinados [2]; } feedData;  

Quando armazenamos o valor de ponto flutuante na união, a matriz de bytes também é preenchida. Para transmitir os dados, passamos o array de bytes para a função setValue () dessas características.

Para aplicativos incorporados, o uso das funções delay () pode causar problemas. Primeiro, enquanto a função de atraso é chamada, toda a atividade do processador para durante o período de atraso. Isso não é ideal quando os pássaros podem vir para o poleiro a qualquer momento. Um segundo problema é que a função delay () pode causar problemas com o mecanismo de notificação BLE. A maneira de evitar isso é não usar delay () em nosso esboço. No entanto, muitas vezes será necessário um atraso no programa de código. Para superar isso, usaremos o esboço do método neste conjunto de 3 supertutoriais de Bill Earl de Adafruit.

Em linhas gerais, criamos um objeto que representa nosso dispositivo embutido. Decidimos sobre um intervalo ou conjunto de intervalos para pesquisar nossos sensores conectados a este dispositivo. Em seguida, criamos uma função Update ().
  void Update () {// Serial.print ("Feed Sensor:"); Serial.println (analogRead (A0)); // As atualizações / notificações de atividades do Perch dependem dos sensores de tempo e proximidade currentPerchMillis =millis (); if ((currentPerchMillis - previousPerchMillis)> perchInterval) {previousPerchMillis =currentPerchMillis; currentLeftPerch =digitalRead (LEFT_PERCH); currentRightPerch =digitalRead (RIGHT_PERCH); if ((currentLeftPerch ==0) &&(previousLeftPerch ==1)) {// nova atividade no perch esquerdo // notificação BLE perchCharacteristic.setValue (1); Serial.println ("ATIVIDADE DO PONTO ESQUERDO"); previousLeftPerch =0; } ...}  

Esta função serve para verificar se os intervalos de tempo dos nossos sensores já passaram, em caso afirmativo, atualize os sensores, senão apenas os ignore. A função Update () é chamada repetidamente na seção loop () de nosso esboço.
  void loop () {// coloque seu código principal aqui, para executar repetidamente:blePeripheral.poll (); birdFeeder.Update (); }  

Assim, emulamos um efeito multitarefa em tempo real com nossos sensores.

Intel Edison e Arduino Breakout Board:

A parte mais desafiadora de trabalhar com o Intel Edison é configurá-lo. O melhor tutorial que encontrei sobre isso é Intel Edison e Intel XDK IoT Edition 101 de Vincent Wong. Posso garantir a você que passar por esse processo e tentar alguns dos exemplos de JavaScript vale a pena!

Trabalhar com seu Edison usando a edição Intel XDK IoT permitirá que você interaja e configure-o na linha de comando. Você também poderá aproveitar as vantagens de muitos programas e modelos de exemplo de JavaScript / Node. Aprender e usar JavaScript / Node para programar abrirá um grande número de APIs fáceis de usar e poderosas, como PubNub, Noble.js e Cloudinary.

Depois de configurar o Edison e confirmar uma conexão ativa com sua rede WiFi, você pode instalar as bibliotecas necessárias para este projeto:

npm install noble

npm install pubnub

npm install cloudinary

A webcam USB

Uma pesquisa no Google por "webcam intel edison" renderá vários bons exemplos e tutoriais. Mas há algum material confuso por aí, que acredito ser devido principalmente a algumas mudanças nos módulos disponíveis no sistema operacional Yocto. Yocto é uma versão embarcada do Linux que roda o Intel edison. A Logitech c270 é uma webcam compatível com uvcvideo. Existem vários tutoriais sobre como garantir que seu Edison tenha o driver / módulo uvcvideo instalado. Sem isso, você não poderá interagir e tirar fotos com a câmera.

Usei as seguintes etapas da câmera da Web no Intel Edison com uploads para o s3 fazer a webcam funcionar no meu Edison. Eu postei as instruções desta postagem do blog abaixo, apenas para o caso de acontecer de ficar obsoleto.

Com seu Edison, as instruções a seguir serão executadas na linha de comando na guia do terminal serial XDK.

"Usaremos alguns pacotes adicionais, que podem ser instalados usando opkg gerenciador de pacotes. Para o início, edite a lista de repositórios com vi:

vi /etc/opkg/base-feeds.conf

e certifique-se de ter todas estas linhas no arquivo:

src / gz all http://repo.opkg.net/edison/repo/all src / gz edison http://repo.opkg.net/edison/repo/edison src / gz core2–32 http:// repo. opkg.net/edison/repo/core2-32 src intel-iotdk http://iotdk.intel.com/repos/3.0/intelgalactic/opkg/i586

Agora, atualize o cache do pacote:

atualização opkg

E instale o módulo do kernel para suportar câmeras uvc usb.

opkg install kernel-module-uvcvideo

Agora conecte sua webcam à porta usb e execute este comando.

ls -l / dev / video *

Se sua câmera for detectada com sucesso, a saída será como:

crw-rw ---- 1 root video 81, 0 Jul 25 09:35 / dev / video0

Para trabalhar com webcam e tirar fotos dentro do prazo temos que instalar 2 pacotes adicionais:

opkg install fswebcam comparsa

*** note que não instalamos o cronie para este projeto, apenas instalamos opkg fswebcam. Cronie não é necessária, como chamamos fswebcam sempre que os sensores IR são acionados por um pássaro em um poleiro, não em uma programação cronometrada ***

Trabalhando com câmera

Para testar sua câmera, execute este comando:

fswebcam -r 1280x720 --jpeg 100 -D 3 -S 13 "test.jpg"
  • -r 1280x720 definir a resolução da imagem, é melhor usar o máximo disponível para sua câmera (opcional)
  • - jpeg 100 defina a qualidade JPEG para o máximo. É útil se você for fazer algo com essas imagens mais tarde (opcional)
  • -D 3 -S 13 adiciona 3 segundos de atraso e pula os primeiros 13 quadros. É necessário porque algumas webcams precisam de tempo para obter as melhores fotos (recomendado)
  • test.jpg é o nome do arquivo de saída "

Informações adicionais sobre como usar uma webcam com o Edison, e outros projetos realmente legais, podem ser encontradas na página do github do Dr. Kim. Ela também posta projetos legais no Hackster.io!

Além de confirmar que o módulo adequado estava presente, também precisei virar a chave entre os cabos microusb e a porta USB na direção da porta USB e conectar a blindagem do Arduino a uma fonte de alimentação. Eu usei a fonte de alimentação de comutação compacta - saída selecionável 3-12 VCC (id de produto Adafruit:1448).

Agora coloque o cartão SD no slot de cartão SD. Usando o Terminal Serial no Intel XDK, use a linha de comando para verificar a placa digitando os seguintes comandos:

cd / media / sdcard

ls

Isso deve exibir todos os arquivos presentes no cartão ou nada se não houver arquivos presentes. Você não deve ver nenhuma mensagem de erro. Se você vir mensagens de erro, recomendo reiniciar a placa Edison sem remover o cartão SD, digitando este comando:

reiniciar

Em seguida, repita os comandos acima após fazer o logon novamente em seu Edison.

Agora, para permitir que nosso Edison acesse o Bluetooth, digite o seguinte comando:

rfkill desbloquear bluetooth

Para confirmar se o bluetooth está ligado e funcionando, digite:

bluetoothctl

Então digite

verificar em

Isso deve ser mostrado nos dispositivos BLE como:

Agora saia do bluetoothctl e clique na guia Intel XDK IoT e conecte-se à sua placa. Selecione um projeto no menu do lado esquerdo, como BLESCAN. Elimine o conteúdo de index.js e remova as dependências do arquivo package.json.

Substitua o conteúdo de index.js pelo programa de nosso repositório github aqui. Envie este código para o seu Edison. Certifique-se de que o Arduino 101 esteja ligado e execute o código Edison. Assim que o Edison detectar seu Arduino 101, você deverá ver algo assim:





O Código:


O código em execução no Edison é escrito em JavaScript ou, mais apropriadamente, em Node.js. Depois de criar os objetos necessários de nossas bibliotecas importadas, criaremos variáveis ​​para representar o serviço BLE que está sendo executado no Arduino 101.

noble.js
  // Serviço BLE e características para nobres // Devem corresponder ao serviço do periférico e UUIDs característicos // (no Arduino 101 neste caso) var LOCAL_NAME ='pássaro'; var SERVICE_UUID ='917649a0d98e11e59eec0002a5d5c51b'; //sem traços!!!! var PERCH_UUID ='917649a1d98e11e59eec0002a5d5c51b'; var TEMPERATURE_UUID ='917649a2d98e11e59eec0002a5d5c51b'; var HUMIDITY_UUID ='917649a3d98e11e59eec0002a5d5c51b'; var FEED_UUID ='917649a4d98e11e59eec0002a5d5c51b';  

Esses UUIDs serão usados ​​por noble.js. Se você alterar os UUIDs em seu Arduino, eles também deverão ser alterados aqui. É importante certificar-se de que não há travessões para que o noble.js funcione corretamente.

Para trabalhar com o noble.js, teremos que fazer a varredura para dispositivos BLE periféricos e, em seguida, descobri-los e, em seguida, conectar. Uma vez conectado iremos percorrer as características disponíveis para uso, utilizando o UUID definido acima. As características são todas características de leitura / notificação.
  noble.on ('descobrir', função (periférico) {console.log ('Dispositivo BLE encontrado:[' + periférico.id + ']' + periférico.advertisement.localName); if (periférico. anúncio.localName ==LOCAL_NAME) {console.log ('Encontrado:' + periférico.advertisement.localName);} periférico.connect (função (erro) {console.log ('Conectado ao periférico:' + periférico.uuid); noble.stopScanning (); // impede-nos de pegar serviços "perdidos" Periféricos.discoverServices ([SERVICE_UUID], função (erro, serviços) {console.log ('serviços:' + serviços.length); var feederService =serviços [0]; console.log ('Bird Feeder Service!'); FeederService.discoverCharacteristics ([], função (erro, características) {características.forEach (função (característica) {console.log ('UUID característica:' + característica .uuid); Character.on ('data', function (data, isNotification) {transformRawData (Character.uuid, data);}); Character.notify ('true', function (error) {if (error) throw e rror; }); }); }); }); }); });  

Existem 2 elementos-chave a serem destacados na seção de código acima. Primeiro, houve uma mudança em como você informa ao noble.js que esta é uma característica de leitura / notificação. Na página do github de Sandeep Mistry:

Dados

Emitido quando a leitura da característica foi concluída, resultado de feature.read (...) ou o valor da característica foi atualizado pelo periférico via notificação ou indicação - após ter sido habilitado com notificar (verdadeiro [, retorno de chamada (erro)]) .

feature.on ('data', callback (data, isNotification));

feature.once ('ler', callback (data, isNotification)); // legado

A mudança é de 'ler' para 'dados'. Encontramos alguns problemas aqui inadvertidamente, usando uma versão mais antiga do noble e, em seguida, alterando a versão mais recente. Demorou muitas horas para descobrir o que aconteceu, por isso queríamos potencialmente ajudá-lo a evitar isso

A outra chave aqui é a função transformRawData (Character.uuid, data). Esta função pega o uuid e os dados entregues da leitura e os passa para a função grande e difícil de controlar. Cada vez que o mecanismo de notificação BLE é ativado por uma mudança em uma característica, esta função é chamada e trata os dados recebidos. É aqui que toda a emoção ocorre.

tranformRawData verifica quais características são recebidas.

Caso o Arduino nos diga que há atividade no poleiro, queremos tirar uma foto. Neste caso, usamos a biblioteca child_process para fazer uma chamada ao programa fswebcam que reside em nosso sistema Yocto (linux). A biblioteca child_process nos permite executar funções de linha de comando a partir de nosso código node.js. Este é um recurso muito poderoso.
  childProcess.execFile ('fswebcam', ['- r 1280x720', fileName], função (erro, stdout, stderr) {console.log (stdout););  

PubNub e Cloudinary:

Essa função também é onde PubNub e Cloudinary entram em jogo! O PubNub fornece uma rede de streaming de dados em tempo real para seu aplicativo. Isso significa que, com uma conexão à Internet, seu aplicativo pode transmitir dados ao vivo em qualquer lugar do mundo. Qualquer outro aplicativo ou programa que tenha a chave de assinatura para seus fluxos publicados terá acesso a uma carga JSON que representa seus dados. No nosso caso, enviamos o nível atual de sementes, temperatura, umidade e contagem de visitas aos poleiros. Adicionalmente, enviamos um link para as 3 fotos mais atuais do alimentador! Estes são JPEGs que foram carregados para Cloudinary com nosso programa. Não há necessidade de executar um servidor! Um arquivo HTML simples com JavaScript incorporado serve como uma interface em tempo real para nosso alimentador de pássaros, cortesia do PubNub!

Na imagem acima, simplesmente enviei a mim mesmo por e-mail o arquivo HTML contendo o código para fazer a interface com o alimentador de pássaros no PubNub e carreguei cada um de um diretório local em um navegador Chrome. Não há necessidade de codificar um servidor para servir esta página em seu Edison.

Cloudinary é um serviço de upload, armazenamento e transformação de imagens. Tem uma API muito simples de usar. Ao desenvolver este projeto, não consegui encontrar uma API mais fácil e direta de usar. Não há nada comparável lá fora. O help desk também é fantástico. Definitivamente, é algo que você vai querer verificar para seus projetos!

No código abaixo, usamos a API cloudinary para fazer upload das 3 imagens mais recentes do cartão SD local. O URL retornado deste upload é então salvo em uma matriz. Esses URLS são então enviados como parte de nossa carga JSON ao PubNub para que possam ser acessados ​​por nossa página HTML para exibição. Beleza, hein ?!

index.html

Do que se trata este arquivo index.html? O arquivo index.html é a nossa IU. Como estamos transmitindo nossos dados usando PubNub e colocando nossas imagens em uma URL acessível publicamente com Cloudinary, podemos tirar proveito do power trio Javascript / HTML / CSS para criar uma IU portátil. Tanto o PubNub quanto o Cloudinary são muito fáceis de usar e poderosos APIs Javascript. Simplesmente os importamos para nosso arquivo html para usá-los:
      

Ao criar o objeto PubNub, damos a ele a chave de assinatura para nosso fluxo de dados e ele pode acessar o fluxo de dados em tempo real sempre que estivermos publicando esse fluxo.
  

Processo de manufatura

  1. DHT Tiny Breakout para Raspberry Pi
  2. Sensor de alcance ultrassônico HC-SR04 no Raspberry Pi
  3. Os melhores acessórios para o seu Raspberry Pi
  4. VISÃO:Para cegos
  5. Intel alista Udacity para conceder diploma por IA na borda
  6. Como escolher o sensor certo para aplicações de enchimento
  7. Filme Sensor para Aeroespacial
  8. Rastreador de sensor RSSI WiFi para a ISS
  9. Nova ferramenta matemática pode selecionar os melhores sensores para o trabalho
  10. O desafio do método 5S para a indústria 4.0