Siri pode ser incrível às vezes, mas ela só pode fazer o que a Apple permite que ela faça. Não mais: um novo serviço da Web chamado BetterThanSiri está abrindo os portões e não exige que seu dispositivo seja desbloqueado para usá-lo. Hoje, explicarei um pouco sobre o serviço e mostrarei como começar a controlar um conjunto de luzes RGB. Assista ao vídeo primeiro para vê-lo em ação.
Como esta magia negra funciona?
Quando você pergunta à Siri algo do “Google”, ela abre o navegador Safari e direciona sua solicitação como seria de esperar. É nesse ponto que uma solicitação HTTP é feita, portanto, se você tiver configurado um proxy HTTP em sua conexão com a Internet - um recurso padrão que não requer jailbreak - a solicitação passa pelo proxy primeiro.
Agora aqui é onde está a mágica: prefazendo comandos com "googolplex", o termo de pesquisa se torna "complexo" mais o que você diz. O proxy - BetterThanSiri.com - identifica a presença de “plex” e intercepta sua consulta de pesquisa. O que quer que segue é então considerado o “comando” real. O BetterThanSiri executa a correspondência de padrões com sua seleção pessoal de comandos configurados e executa o código relevante. É realmente incrível, e mal posso esperar para mostrar como usá-lo.
Controlando luzes RGB
Para demonstrar BetterThanSiri, eu configurei um circuito básico de envio e recebimento de IV - veja meu tutorial anterior sobre a brincadeira do diabo da TV Apresentando o Diabo da TV, um controle remoto fácil Arduino Prank Apresentando o diabo da TV, uma brincadeira Arduino Saiba mais sobre como interagir com códigos IV ou leia sobre a versão condensada. Aqui estão as partes que você precisa:
- Arduino, blindagem Ethernet e cabeamento Ethernet
- LED IV, resistor de 220 Ohm (depende do seu LED específico, mas isso deve ser suficiente na maioria dos casos) e receptor IR
- Fita LED RGB, fonte de alimentação de 12V e controle remoto existente
Cada controle remoto funciona codificando um número em pulsos de luz infravermelha - então, primeiro, você precisará aprender os números de controle usados por seu controle remoto específico. Faça o download da biblioteca IRremote e reinicie o Arduino IDE. Para a maioria dos receptores IR, com a cúpula do LED voltada para você, os pinos da esquerda para a direita são: sinal, GND, + 5V.
Conecte o sinal ao pino 11 e os outros dois como de costume e carregue no exemplo IRrecvDemo fornecido pela biblioteca. Abra o console serial e comece a pressionar os botões do seu controle remoto - você deve obter alguns valores HEX. Na verdade, queremos esses valores hexadecimais como um número inteiro longo, portanto, adicione um novo Serial.println sem a parte HEX:
Serial.println (results.value, HEX); Serial.println (results.value);
Registre todos os números que você precisa. No meu caso, encontrei:
- Vermelho: 16195807
- Verde: 16228447
- Azul: 16212127
Se você estiver usando um tipo diferente de controle remoto, você também pode precisar carregar o exemplo IRrecvDump, que também emitirá o tipo de sinal - no meu caso, o controle remoto estava enviando códigos NEC de 32 bits (ou 8 dígitos), o que se reflete no meu código de servidor modificado depois - lembre-se de alterar isso se precisar.
Antes de prosseguir, conecte o LED IV para envio (o lado plano do LED vai para GND, o outro lado passa por um resistor de 220 Ohm para o pino 3) e carrega o IRsendDemo . Duplique o comando principal send algumas vezes e substitua seus próprios códigos IR para testá-los - adicione um atraso entre cada um. Upload, e se tudo estiver funcionando bem, você deve ver seus LEDs percorrendo os comandos que você adicionou.
Em seguida, baixe o pacote RESTduino - há uma biblioteca Ethernet substituta lá, você precisará adicionar e novamente, reiniciar o Arduino IDE. O RESTduino é uma poderosa API da web RESTful - cria um servidor, que atende a solicitações recebidas com a capacidade de controlar pinos ou ler valores a partir deles. Experimente a demo incluída primeiro para garantir que tudo esteja funcionando - você precisará modificar o endereço MAC, tornar o servidor IP estático e definir um IP no seu alcance de rede local (provavelmente 192.168.0.x ou 10.0.1.x ) .
Você deve então poder acessar seu Arduino de qualquer navegador - apenas tente comandos simples para ler os valores na entrada analógica 1 - por exemplo:
http://10.0.1.99/a1/
Não importa se nada está conectado, estamos apenas verificando se o servidor funciona. Agora, faça o upload da minha versão modificada desta demonstração. Eu tirei o controle do pino e substitui-o pelo controle IR. Use um URL do formulário:
http://10.0.1.99/1/IRCODE
A linha importante no código modificado está aqui:
irsend.sendNEC (strtoul (valor, NULL, 10), 32);
Você precisará alterar isso se o controle remoto não for do tipo NEC ou não tiver 32 bits de comprimento. Eu também adicionei um atraso e repeti o comando algumas vezes, já que o IR pode ser um pouco pouco confiável às vezes. Por fim, configure o encaminhamento de porta O que é encaminhamento de porta e como ele pode me ajudar? [MakeUseOf Explains] O que é o encaminhamento de porta e como ele pode me ajudar? [MakeUseOf Explains] Você chora um pouco por dentro quando alguém lhe diz que há um problema de redirecionamento de porta e é por isso que seu novo aplicativo não funciona? Seu Xbox não permite que você jogue, seus downloads de torrent recusam ... Leia Mais no seu roteador para que você possa enviar comandos IR de qualquer lugar do mundo. Encaminhe tudo na porta 80 para o IP interno do seu Arduino. Agora você deve poder substituir o IP interno por seu IP público e o controle ainda deve funcionar. Agora podemos passar para configurar nossos comandos personalizados no BetterThanSiri.com.
Comece inscrevendo-se e faça login para gerenciar sua lista de comandos pessoais.
Dê uma olhada nos comandos existentes se você estiver curioso sobre como eles funcionam, ou simplesmente vá em frente e crie um novo. Nomeie o comando e adicione o correspondente de frase:
luzes ~
O que significa que "este comando irá combinar luzes + qualquer coisa" . Em seguida, cole o código abaixo - modifique isso para incluir seu endereço IP público (ou um DNS dinâmico, se você tiver um), bem como as frases que você deseja corresponder e os códigos IR relevantes. A primeira variável na função é apenas um pequeno texto enviado de volta ao navegador. Você pode copiar / colar mais do else se bits para criar quantos comandos quiser.
if (frase == "luzes acesas") {respondWithTextAndURL ('Ativando luzes', 'http: // YOURIP / 1/16236607'); } else if (frase == "luzes vermelhas") {respondWithTextAndURL ('Preparando-se para o tempo sexy', 'http: // YOURIP / 1/16195807'); } else if (frase == "luzes azuis") {respondWithTextAndURL ('Modo de trabalho ativo', 'http: // YOURIP / 1/16212127'); } else if (frase == "luzes verdes") {respondWithTextAndURL ('You \' e estranho ', ' http: // YOURIP / 1/16228447 '); }
Siga as instruções para configurar o proxy no seu dispositivo. Essencialmente, você só precisa adicionar um proxy HTTP automático (URL: http://totally.betterthansiri.com ) à sua conexão com a Internet. Na primeira vez que você usar o serviço, será necessário fazer login a partir do seu dispositivo móvel para saber quais são seus comandos pessoais, mas será necessário fazer isso apenas uma vez.
Limitações
Como você pode ver, o BetterThanSiri é um sistema bastante complexo no momento - não há interface de arrastar e soltar, então você precisa entender o básico do Javascript para criar seu próprio conjunto de comandos. Dito isso, eles expuseram uma enorme quantidade de energia com a capacidade de postar dados em URLs aleatórios em segundo plano ou apenas em um redirecionamento, por isso não poderíamos pedir mais. Você sempre pode procurar receitas existentes se não estiver preparado para programar as suas.
Ele também não fala de volta para você como Siri faz. Todas as contas incluem um recurso "diga-me uma piada" semelhante ao Siri, mas as piadas são exibidas na tela, no seu navegador. É possível que eles possam adicionar isso mais tarde usando um plug-in de JavaScript de terceiros, mas isso pode significar maior uso de largura de banda ou capacidade de resposta.
Finalmente, há, claro, o atraso envolvido. Seu discurso é enviado para a Apple para processamento em um comando de texto, enviado de volta para você, enviado para o proxy, processado pelo BetterThanSiri e, em seguida, enviado pela Internet ao nosso Arduino local. Na demonstração, cada comando levou cerca de 5 a 10 segundos no total, e é improvável que isso possa ser melhorado. Para automação residencial, isso é perfeitamente aceitável, mas se você estiver tentando entregar as informações de volta ao usuário em tempo hábil, é um pouco frustrante.
Preocupações com segurança
Usar um proxy HTTP como esse significa que cada solicitação HTTP que você faz é roteada através de seus servidores: em teoria, eles poderiam examinar tudo o que você procura, todos os sites que você visita. Eu perguntei aos desenvolvedores sobre isso, e essa foi a resposta deles:
Definitivamente, uma preocupação válida, mas NÃO olhamos para todas as solicitações HTTP. Nosso autoconfig de proxy tem um mecanismo de decisão que examina apenas as solicitações HTTP relevantes para o GoogolPlex (com “plex” nelas).
Você pode tomar isso pelo valor de face; seria impossível provar o contrário, mas se o software do servidor fosse de código aberto (o que não é), você poderia pelo menos verificar isso e executar o seu próprio servidor privado. Dado o potencial para aplicativos comerciais, parece improvável que eles o abrissem, portanto, se a privacidade e a segurança em seu navegador móvel forem particularmente importantes, é compreensível que esse não seja um serviço que você deseje usar.
Pessoalmente, não acho que seja um eufemismo chamar esse serviço de realmente incrível. Eu ouvi sobre isso inicialmente há alguns meses, mas na época ele estava limitado a basicamente controlar o Spotify - uma prova de conceito. Agora que eles adicionaram a capacidade de criar comandos personalizados e interagir com qualquer coisa, é um sistema incrivelmente poderoso que eu estarei revendo no futuro para formar a base de um sistema de automação residencial completo do Arduino. Para que usos você pode pensar em BetterThanSiri?