搭建简易的物联网服务端和客户端-Cortana控制(十七)
就是用小娜打开软件,然后软件自动操作。 感谢kelannan 代码地址:https://github.com/klren0312/stm32_wifi 2017.4.21
Cortana控制
1.Cortana介绍
微软发布的全球第一款个人智能助理
2.控制原理
1)通过小娜打开自己写的软件,软件通过串口发送相关命令,控制单片机。 2)当然小娜打开软件可以通过手打和语音。
3.Arduino程序编写
纯是为了方便,你也可以用stm32,stm32串口相关程序和我前面的蓝牙的串口代码是一样的。 串口接收到“F”则开灯,接收到“T”则关灯
char Val;
int Pin1 = 13;
void setup() {
Serial.begin(9600);
pinMode(Pin1, OUTPUT);
digitalWrite(Pin1, LOW);
}
void loop() {
if(Serial.available()>0){
Val=Serial.read(); //read it
Serial.print(Val);
}
if (Val=='F'){
digitalWrite(Pin1, HIGH);//开灯
}
if(Val=='T'){
digitalWrite(Pin1,LOW); //关灯
}
delay(10);
}
4.C#程序编写
(1)在Visual Studio中新建C#命令行程序
新建C#命令行程序
(2)引入串口相关的包
using System.IO.Ports;
(3)主程序
向指定串口发送相关字符命令
- 开灯程序
namespace CortanaControl
{
class Program
{
static void Main(string[] args)
{
SerialPort port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
port.Open();
port.Write("F");
port.Close();
}
}
}
- 关灯程序
namespace CortanaControl
{
class Program
{
static void Main(string[] args)
{
SerialPort port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
port.Open();
port.Write("T");
port.Close();
}
}
}
(4)将运行生成的程序分别改名放到一起
生成的程序
5.让Cortana能搜索到我们的程序
将程序的快捷方式放到开始菜单的文件夹内,当然不是那么简单的放。
(1)找到文件夹
这是我的文件夹位置
C:UserszzesAppDataRoamingMicrosoftWindowsStart MenuPrograms
zzes是我的用户名,其他应该都是一样的
(2)到上面的位置后,可以新建一个文件夹,名称随便取,主要是把程序放里面不乱。
比如我建的文件夹IOT
新建一个文件夹
(3)进入IOT
文件夹,在里面新建快捷方式
新建快捷方式
(4)在对象位置的框中写入
%SystemRoot%system32cmd.exe /C start "" "D:open.exe"
对象位置
(5)在快捷方式名称中写你要在Cortana中查找的名称
比如开灯
4.png
(6)关灯也是一样的步骤
5.png
(7)小娜搜索测试
QQ截图20170420225338.png
6.结果
http://v.youku.com/v_show/id_XMjcyMDA5MDMwNA==.html
@治电小白菜20170421
- 《Deep Learning with Python》第一章 1.1 人工智能、机器学习和深度学习
- boost::function的用法
- rpc框架之 thrift 学习 1 - 安装 及 hello world
- WordPress自定义栏目运用实例Ⅰ:添加文章来源
- ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表
- 算法:支持重复元素的二分查找
- .NET 异常处理的动作策略(Action Policy)
- 如何在mac本上安装android sdk
- Fityk-曲线拟合工具
- maven: 打包可运行的jar包(java application)及依赖项处理
- Effective java 第2版 - 笔记(01) 单例(Singleton)的枚举(enum)实现
- 恶心的0.5四舍五入问题
- 乐视金融更名 相关域名引关注
- weblogic.nodemanager.common.ConfigException: Native version is enabled but nodemanager native librar
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C语言入门系列之1.C语言概述和上机运行简单C程序
- 开发微信小程序,我为什么放弃 setData,使用 upData
- C语言入门系列之3.顺序程序设计和输入输出
- uniapp提交选中的性别的value值
- LeetCode 1422. 分割字符串的最大得分
- LeetCode 64. 最小路径和
- C语言入门系列之4.分支结构程序-关系、逻辑运算和if、switch语句
- LeetCode 62. 不同路径
- 在裸机上部署Pulsar集群 顶
- JNI回调Java
- 你的函数有多快?使用 performance 监控前端性能
- spring security 密码过期强制修改密码
- Spring Boot入门系列(十五) SpringBoot开发环境热部署的配置
- idea启用springboot项目热部署
- 【LeetCode每日一题】22. Generate Parentheses