这种台灯怎么用手机推拉控制亮度的台灯

智能照明就是用手机遥控灯光?你想的太简单了
10:04:21 &出处:其他 &作者:佚名 &
  之前在天猫订购那款欧普&阑珊&LED的时候,顺带关注了欧普的微信公众号。正巧这几天公司也在策划一个与未来有关的选题,结果没想到,这下倒让我找到了一个不错的切入点。  各位肯定还记得,我最早与欧普结缘是因为一款能自定义色彩的小台灯。那款叫做欧普&小O(欧)&的LED台灯不但长相可爱,而且还能利用手机上的&欧普智慧灯光&app来控制灯光色彩与亮度,它甚至还能播放歌曲!虽然我觉得这款智慧LED的娱乐性大于其实用性(更多情况下还是做为装饰或者氛围灯使用),但是它的手机app遥控特性还是给我留下了很深的印象。     后来我在新居装修时选用了那款同样被写入博客的&阑珊&。这款LED吸顶灯可以用遥控器自由变换亮度与冷暖色温,轻而易举的平息了我与家里领导关于&到底该用什么颜色灯光&的争论。再加之其外观美观,价格适中,因此很得我的欢心。只不过当时我心中还有一个小愿望:要是&阑珊&能像&小O&那样直接用手机app控制且还能变幻色彩啥的那就更好玩了!    没想到刚过几天,我在欧普微信公众号里就找到了一款智慧&明辉&。这款尺寸与&阑珊&相近,既适用于卧室也可以用在的圆型吊灯简直就是为了实现我那个小愿望而生的。  和&小O&一样,&明辉&也采用光学PMMA材料导光板作为灯具主体,所以它能够上下两面同时发光:当底部光线直接照亮房间的同时,顶部发出的光线能够通过天花板反射,让整个房间都沐浴在柔和均匀的LED灯光之下。同时,它也同样通过手机app自由调节灯光色彩与亮度。设想一下:你可以根据自己的心意随时变换房间的灯光氛围,比如让房间从静谧沉稳的&蓝色海底&突然变成热情浪漫的&玫瑰火山&!    呃,好吧... 我承认自己多少有些后悔&阑珊&是不是买早了。好在&明辉&为了两面发光而采用吊装,而我为了在卧室里使用投影机所以还是觉得吸顶造型比较合适...  为了了解&明辉&的更多细节,我找了在欧普工作的朋友进行了一些交流。照他的话来说,欧普已经意识到传统家用光源虽然依旧有一定的市场前景和发展空间,但竞争也越发激烈。于此同时,部分海外竞争品牌已经开始着力于新一代的研发而不仅仅把目光停留在传统灯具上。因此,欧普也会加速在智能领域的步伐。事实上,无论是&小O&、&阑珊&还是&明辉&,还都只是欧普在智能家居领域上的&先头部队&,之后欧普还将会把对LED的智能控制加入到更多类型产品中去。     朋友笑着对我说,你以为欧普的智能只不过是用手机app遥控灯光?你想的太简单了。  他特别提醒我注意一点:之前的&小O&是使用欧普自己研发的&欧普智慧灯光&app来控制,而现在欧普的新品则改用&阿里小智&app进行操控。这是因为欧普已经加入了&阿里物联平台&阵营,使自己与海尔、方太、海信、西门子、等企业一样,新品将会符合阿里物联规范。从此之后,这个阵营中的各类家电产品,只需要使用同一款&阿里小智&app就能操控。与此同时,这些产品之间也将会相互协作,以构成一个个智能家居的&解决方案&。    在我看来,欧普加入&阿里物联平台&的这一步,不光使之告别之前在智能家居领域的&单兵作战&局面,而且这对欧普在未来吸收其他品牌智能技术,在构成智能家居整体&解决方案&的同时,提升自身产品竞争力有着重大意义。  事实上,就好像我之前曾经介绍过的京东智慧型音响&叮咚&期望成为&京东微联&(一个与&阿里物联平台&近似的智能家居规范)的核心一样,与人们生活密不可分的欧普灯具系列其实更具成为&智能家居核心&的潜质。     相较于依然需要寻找地方摆放以及外部插电的&叮咚&音响,欧普灯具在家居始终中有着得天独厚的优势:  首先,欧普的灯具同样也可以集成带有语音识别功能的高灵敏度远程麦克风以及运算部件(只是把&小O&的性能进一步提升)。同时,由于灯具会始终占据里室内的最佳位置&&无论是吸顶灯还是吊灯,通常都位于房间中心且四周无遮挡并且还有稳定的电源&&能够做到对房间的最大化覆盖。  因此,以欧普灯具为智能家居的核心,利用它来接收用户发出的指令,并由它来控制其他符合&阿里物联平台(或&京东微联&等其他规范)&的智能家电,这岂不是未来智能家居的最可行的解决思路之一吗?我热切期望欧普能够在智能家居这条路上走的更快一点,更远一点
责任编辑:xuweiwei
相关标签:【图片】做了个手机蓝牙无线控制灯开关的玩意【技术宅吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,118,999贴子:
做了个手机蓝牙无线控制灯开关的玩意收藏
有人看就发教程,没人就算了,毕竟也不算什么
有人啊!楼主继续
做的时候没拍,直接上教程吧
哇!终于赶上直播了   --来自小米2s助手版贴吧客户端
单片机最小系统
前排~楼主快更 已收藏
其实,仿真器上是不比话最小系统的,画上是错的,只是方便理解
画的有点乱,凑合看看
直播啊,,,
手机正在扫描存储卡,等下拍张实物图
大家都认识的STC89C52
某宝上买的蓝牙模块h%3D90%2C160/sign\u003dfd73e48bbe1a46ae03363e/c3fdfca298d003a6c27d1ed31b24fa.jpg","type":"3"}]
继电器,相当于开关了
学计算机的,所以不像学电子的。焊工太差,还没有线,多数用引脚连的
#include &reg52.h&sbit k=P2^3;main(){ TMOD=0x20; TH1=0 TL1=0 TR1=1; REN=1; SM0=0; SM1=1;
while(1) {
case 'A':k=0;
case 'a':k=1;
代码用的最简单的查询法
还有个安卓手机客户端,等下放网盘分享过来
效果图就是一楼的,接220v家用电注意安全啊
安卓客户端
楼主,苹果的怎么办?
OVER,虽然技术吧以满足不了我了,但我还是会默默关注大家的
居然要打验证?!我生气了
登录百度帐号创意照明台灯新品:手机APP控制光度和色温-千家智能家居网
创意照明台灯新品:手机APP控制光度和色温
[导读]MyLiFi&,由 eliumstudio 设计事务所的 Pierre Garner 主持设计,它展现了拥有无害电磁波和安全性强的宽带互联网技术。轻质铝材打造的台灯...
  MyLiFi&,由 eliumstudio 设计事务所的 Pierre Garner 主持设计,它展现了拥有无害电磁波和安全性强的宽带互联网技术。
  轻质铝材打造的台灯被饰以白色,红、黄、蓝三色线缆让 MyLiFi& 展现活泼的性格。可变换的摆放形态令其适用于商务或学术等环境需求。
  灵活的 MyLiFi& 台灯可以根据使用者的需求转变姿势,通过手机 APP 控制光度和色温,在暖光 2200K 到日光 6500K 的变光范围里,使用者可以轻松营造舒适的氛围。
千家智能家居网微信公众号
扫描下方二维码,关注千家智能家居网微信公众号,随时随地知晓智能家居行业!
编辑:陈迪卡
100/100字符
全部评论(0)
澳门特别行政区
广西壮族自治区
内蒙古自治区
宁夏回族自治区
西藏自治区
香港特别行政区
新疆维吾尔自治区Android 手机控制台灯开关详细教程-智能台灯
用自己的手机控制自己的台灯,是不是想想就挺有趣的! 以后就可以在床上,用手机来控制台灯的开关,是不是很酷!博主以前也有过这种想法,然后就尝试做了一下。为了让有和我一样想法的同学少走点弯路,就写了这篇博客,与诸君共勉。
国际惯例先上效果图
先讲一下整体思路哈!手机肯定不能直接控制台灯的,需要一个中间物来协调,在这里我用的是51单片机(如果大家不知道也没关系,下面我还会说的)。接下来就是具体怎么控制的,其实原理挺简单的。1.手机通过蓝牙来与单片机通信,因而单片机需要外接一个蓝牙模块(我用的是hc-05
主从一体 蓝牙模块)。大家千万不要被外接给吓到了,外接模块一点都不难的,就只要去淘宝卖相应的模块然后用杜邦线(不知道的可以把它当做导线来理解)和51单片机连起来就好了。到这里手机已经可以和51单片机通信了,也就是说手机可以给单片机发送“开灯”和“关灯”的消息了。2.接下来就要解决当51单片机接收到”开灯“和”关灯“的消息后,该怎么控制台灯实际的开关?这个时候我们就需要一个继电器(也是单片机的外接模块),关于继电器我们可以看下面的图片。继电器一共有三个输出端口(常开端
公共端 常闭端)。事先申明,我们可以通过单片机控制继电器的公共端是和常开端
连通,还是和常闭端连通。现在我们只需要剪断台灯的一根电线,将电线的两头分别和继电器的常开端和公共端连接起来即可。通过单片机控制继电器的公共端和常开端连接时台灯打开,反之台灯关闭。大致原理就是这样,我们来梳理一下整个流程。首先手机通过蓝牙和单片机的蓝牙模块建立通信,当手机发送一个打开台灯信号时,单片机收到相应的信号并控制继电器的公共端指向常开端,台灯亮起。
next~就是具体实现了。一共分为两大部分,分别是Android端和单片机端,先从Android端开始说起。
一.Android端:
Android端其实就是一个简单的蓝牙通信,Android端只需要通过蓝牙向单片机的蓝牙模块发送开关对应的消息即可(我是用0xff表示打开台灯,0x00关闭台灯)。先来看看工程的总体结构以及软件界面。
其中BluetoothTool类是一个蓝牙工具类,里面有关于蓝牙的连接以及发送接收数据功能。IUpdateUI是一个接口,用来在 BlurtoothTool中更新主界面的设备列表以及log。MainAty就是主界面的Activity。activity_main.xml和layout_lv_devices_item.xml不用多说了吧,就是一些界面有关的。关于Android端的解析以贴代码为主,因为代码中我都有详细的解释,比较重要的我会在博客中用文字再次解释的。
1.MainAty:
获取蓝牙适配器,可以通过蓝牙适配器获取蓝牙设备的信息。
* 获得默认的蓝牙适配器
private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
如果手机没打开蓝牙,则界面跳转到打开蓝牙界面。
protected void onStart() {
super.onStart();
/** 判断蓝牙是否可用,不可用时请求打开*/
if (mBluetoothAdapter != null && !mBluetoothAdapter.isEnabled()) {
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(intent);
通过蓝牙适配器获取之前匹配过的蓝牙设备信息(如单片机的蓝牙设备),所以第一次使用的时候,先用手机自带的蓝牙匹配成功一次哈!蓝牙设备中一个比较重要的信息就是设备地址-如98:D3:33:80:83:05就是一个蓝牙设备地址,唯一标示。
/** 获取以前匹配过的蓝牙设备*/
Set&BluetoothDevice& devices =
if (mBluetoothAdapter != null)
devices = mBluetoothAdapter.getBondedDevices();
Toast.makeText(MainAty.this, "该设备不支持蓝牙功能 ", Toast.LENGTH_SHORT).show();
if (devices != null && devices.size() & 0) {
data.clear();
for (BluetoothDevice device : devices) {
HashMap&String, Object& map = new HashMap&&();
map.put("lv_left_icon", R.drawable.lv_left_icon);
map.put("lv_address", device.getAddress());
map.put("lv_right_icon", R.drawable.lv_right_white);
data.add(map);
HashMap&String, Object& map = new HashMap&&();
map.put("lv_left_icon", R.drawable.lv_left_icon);
map.put("lv_address", "没有已经匹配的设备");
map.put("lv_right_icon", R.drawable.lv_right_white);
data.add(map);
mTextView.append("没有已经匹配的设备" + "\r\n");
simpleAdapter.notifyDataSetChanged();
连接指定的蓝牙:通过调用BluetoothTool连接蓝牙,我们传入了设备的地址"(String) data.get(0).get("lv_address")"以及连接类型 BluetoothTool.ServiceOrClient.CLIENT(这里我们是以客户端的形式连接,也就是单片机的蓝牙当作客户端 )。之后设置了BluetoothTool的更新UI接口,并在MainAty中具体实现。builder.setPositiveButton("连接", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i) {
mBluetoothTool = new BluetoothTool((String) data.get(0).get("lv_address"),
BluetoothTool.ServiceOrClient.CLIENT);
mBluetoothTool.SetOnIUpdateUI(new IUpdateUI() {
public void updateListViewDevices() {
for (int i = 0; i & data.size(); i++) {
if (i == index) {
data.get(i).put("lv_right_icon", R.drawable.checked);
data.get(i).put("lv_right_icon", R.drawable.lv_right_white);
simpleAdapter.notifyDataSetChanged();
public void updateLog(String msg) {
mTextView.append("\r\n" + msg);
可以看到打开台灯按钮的点击事件,只是调用了BluetoothTool的发送功能向单片机蓝牙发送了一个ff消息(具体发送时将ff转化成16进制0xff,因而在单片机端我们会收到一个0xff的数据)。关闭事件同上。
public void onClick(View view) {
int id = view.getId();
switch (id) {
case R.id.id_btn_open:
if (mBluetoothTool != null) {
mBluetoothTool.sendData("ff");
Toast.makeText(MainAty.this, "蓝牙未连接...", Toast.LENGTH_SHORT).show();
case R.id.id_btn_close:
if (mBluetoothTool != null) {
mBluetoothTool.sendData("00");
Toast.makeText(MainAty.this, "蓝牙未连接...", Toast.LENGTH_SHORT).show();
2.BluetoothTool
传入的蓝牙设备地址(一般是单片机端蓝牙的地址)
* 蓝牙设备地址
private String mBluetoothAddress =
通过传入的蓝牙地址获取相应的蓝牙设备。
* 蓝牙设备
private BluetoothDevice mDevice =mDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(mBluetoothAddress);
这里我们都是以客户端的形式连接的。(也就是单片机上的蓝牙是客户端)。
* 枚举 表示是客户端还是服务端
public static enum ServiceOrClient {
NONE, SERVICE, CLIENT
private ServiceOrClient mServiceOrClient = ServiceOrClient.NONE;
Handler 用来更新UI
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_UPDATE_LISTVIEW:
if (iUpdateUI != null)
iUpdateUI.updateListViewDevices();
case MSG_UPDATE_LOG:
if(iUpdateUI!=null)
iUpdateUI.updateLog(msg.obj + "");
单片机的蓝牙与手机端的蓝牙通信的socket,说明一下蓝牙通信其实也是基于socket通信的。
* 蓝牙客户端socket
private BluetoothSocket mClientSocket =
以客户端身份连接的线程,我们来看看具体实现。
* 客户端线程
private ClientThread mClientThread =
通过蓝牙设备获取相应的socket,之后单片机的蓝牙和手机的蓝牙通信都是通过这个socket。其中在蓝牙中,每个服务和服务属性都唯一地由"全球唯一标识符" (UUID)来校验。而且这个UUID的值必须是0-805F9B34FB,这个是android的API上面说明的,用于普通蓝牙适配器和android手机蓝牙模块连接的。获取之后通过socket的connect进行连接,连接成功之后开启读取数据的线程。
* 客户端线程
private class ClientThread extends Thread {
public void run() {
super.run();
/** 客户端通过服务端的UUID与之连接*/
mClientSocket = mDevice.createRfcommSocketToServiceRecord(
UUID.fromString("0-805F9B34FB"));
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "正在连接。。。";
mHandler.sendMessage(msg);
/** 连接*/
mClientSocket.connect();
msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "连接成功";
mHandler.sendMessage(msg);
msg = Message.obtain(null, MSG_UPDATE_LISTVIEW);
mHandler.sendMessage(msg);
/** 接收数据*/
mReadThread = new ReadThread();
mReadThread.start();
} catch (IOException e) {
e.printStackTrace();
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "连接失败";
mHandler.sendMessage(msg);
可以看到线程一直在查看有没有数据,如果有的话就接受,并根据接收到的数据进行相应的显示。有一点要先说一下,就是如果手机成功发送了一个开灯命令给单片机,单片机收到之后成功控制继电器将台灯打开之后,单片机会回发一个消息0xff给手机。因此手机端只要收到0xff这个消息,就知道台灯打开成功了手机就可以显示台灯成功开启。
* 读取数据线程
private class ReadThread extends Thread {
public void run() {
super.run();
byte[] buffer = new byte[1024];
InputStream in =
in = mClientSocket.getInputStream();
while (true) {
if ((bytes = in.read(buffer)) & 0) {
byte[] buf_data = new byte[bytes];
for (int i = 0; i & i++) {
buf_data[i] = buffer[i];
int j = buffer[i];
j = buffer[i] & 0
String str = Integer.toHexString(j);
if ("ff".equals(str)) {
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "台灯打开";
mHandler.sendMessage(msg);
} else if ("0".equals(str)) {//注意不能用00,因为0x00实际的值是0
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "台灯关闭";
mHandler.sendMessage(msg);
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "err...";
mHandler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "连接数据失败";
mHandler.sendMessage(msg);
} finally {
if (in != null)
in.close();
} catch (IOException e) {
e.printStackTrace();
向单片机发送数据,通过socket获取相应的输出流,然后将要发送的字符串转化成16进制发送。
* 发送数据
* @param str
public void sendData(String str) {
if (mClientSocket == null) {
Log.d(TAG, "sendData: 没有连接。。。");
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "没有连接";
mHandler.sendMessage(msg);
OutputStream out =
out = mClientSocket.getOutputStream();
out.write(getHexBytes(str));
} catch (IOException e) {
e.printStackTrace();
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "发送失败";
mHandler.sendMessage(msg);
连接蓝牙,就是启动客户端连接线程。
* 连接蓝牙
private void connect() {
if (mIsConnected == true) {
Log.d(TAG, "connect: 已经连接");
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = "已经连接";
mHandler.sendMessage(msg);
/** 客户端*/
if (mServiceOrClient == ServiceOrClient.CLIENT) {
if (!mBluetoothAddress.equals("null")) {
mDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(mBluetoothAddress);
mClientThread = new ClientThread();
mClientThread.start();
mIsConnected =
} else Log.d(TAG, "connect: address is null");
Android端项目github地址:
二.单片机端:
说具体实现之前,先要说一下用到的设备。
1.51单片机开发板 附上博主买的地址
2.杜邦线(公对母,母对母,公对公) 附上博主买的地址
3.继电器(1路继电器模块带光耦隔离 支持高低电平触发 5V 一路) 我的台灯是usb接口的电压挺小的,大家也用这种台灯做这个吧。附上博主买的地址
4.蓝牙模块(HC-05 主从机一体蓝牙模块 无线蓝牙串口透传模块 无线模块)
附上博主买的地址
哈哈 先给大家看一看单片机方面的代码 大家看了之后肯定就会有动力写了!
#include &reg52.h&
unsigned char flage,
sbit p33=P3^3;//单片机P3.3口
void main()
TMOD=0x20;//设置定时器1为工作方式2
// 波特率=9600时定时初值为FDH
TH1=0//装载TH1
TL1=0//装载TL1
TR1=1;//启动T1(定时器1),开始计数
REN=1;//允许串行接收
//SM0=0 SM1=1 为工作方式2
EA=1;//开启总中断
ES=1;//允许串口产生中断
if(flage==1)
ES=0;//不允许串口产生中断 保证此次操作安全
SBUF=//发送数据
while(!TI);
TI=0;//取消此次中断申请
ES=1;//允许串口产生中断
void interrupt4() interrupt 4//4号中断 处理函数
RI=0;//取消此次中断申请
if(SBUF==0xff)//开灯
p33=1;//单片机P33口置为高电平
else if(SBUF==0x00)//关闭
p33=0;//单片机P33口置为低电平
temp=SBUF;
}是不是看起来感觉挺少挺简单的,没错这就是单片机方面的所有代码。个人感觉单片机方面代码其实问题不是很大的,主要是硬件方面的问题,所以代码先放一放,我们先来说说具体器件的问题。
1.51单片机
图一是单片机开发板,其中开发板中间那个长方形就是51单片机,图二就是单个的51单片机,图三是51单片机的引脚图。引脚就是单片机裸露在外面的银色导体,引脚可以输出高电压(等价于逻辑“1”)也可以输出低电压(等价于逻辑“0”)。补充一下电平信号的概念,TTL被利用的最多是因为通常数据表示采用规定,+5V等价于逻辑“1”,0V等价于逻辑“0”,这被称做TTL(晶体管-晶体管逻辑电平)信号,这是控制的设备内部各部分之间通信的标准技术。个人认为单片机最重要的一个特性就是我们可以往单片机中写入自己的程序(C++/C/汇编
这个过程也叫做烧写程序),通过自己的程序控制单片机各个引脚的输出电压,然后在通过引脚的输出电压来控制相应的外接模块。外接模块就是将单片机的引脚和模块的引脚连接起来,单片机引脚的输出电压当做模块引脚的输入电压。如果之前没有接触过单片机开发的,博主强烈建议去看看“郭天祥十天学会单片机的视频教程”。如果你去淘宝买了单片机开发板到时会有一张光盘里面有很多的资料 教学视频 开发工具 以及配套开发板的结构图,郭天祥十天学会单片机的视频教程光盘里也有的。博主我将单片机有关的资料全部打包上传了
2.HC-05主从一体蓝牙模块
HC-05主从一体蓝牙模块一共有6个引脚,我们只需要关注VCC,GND,TXD,RXD 这四个引脚。VCC:电源端,接单片机的VCC(高电平)。GND:接地端,接接单片机的GND端(低电平)。TXD:发送端,一般表示为自己的发送端,正常通信必须接另一个设备的RXD(我的单片机P30口是RX端)。RXD:接收端,一般表示为自己的接收端,正常通信必须接另一个设备的TXD(我的单片机P31口是TX端)。led指示蓝牙连接状态,快闪表示没有蓝牙连接,慢闪表示进入AT模式,双闪表示蓝牙已连接并打开了端口。注意!
不要将电源接到信号脚上,会直接烧坏。有可能你们的单片机RXD端,TXD端和我的不一样,这个就要去看光盘里的开发板结构图了,里面有画出来的。这里我想提醒一下大家,单片机烧写程序也是通过RXD端和TXD端。所以在烧写的时候要确保RXD端和TXD端没有外接其他模块,如果你接了蓝牙就会烧写失败。
蓝牙模块的编程本质上就是串口编程,串口编程大家可以去看看“郭天祥十天学会单片机的视频教程”里面有相应的教学。在这里我稍微解释一下波特率,波特率,可以通俗的理解为一个设备在一秒钟内发送(或接收)了多少码元的数据。为了在彼此之间通讯,收发端必须使用相同的率进行操作。如果将方的率设置为高于发送方的波特率,则接收数据时会出现错误。
hc-05可以用指令调节波特率,我们就用默认的9600bps。。在单片机代码中,我们要通过设置单片机的计数器将将单片机的波特率也调成9600,同时打开中断开关,这部分的代码如下。
TMOD=0x20;//设置定时器1为工作方式2
// 波特率=9600时定时初值为FDH
TH1=0//装载TH1
TL1=0//装载TL1
TR1=1;//启动T1(定时器1),开始计数
REN=1;//允许串行接收
//SM0=0 SM1=1 为工作方式2
EA=1;//开启总中断
ES=1;//允许串口产生中断
蓝牙模块收到数据会触发4号中断,程序进入4号中断处理函数。我们只要重写中断函数如下。51单片机有两个物理上独立的接收 发送缓冲器SBUF,它们占用同一地址99H。 在中断处理函数中通SBUF存储着蓝牙模块接收到的数据。将其和我们自己定义的‘开’和‘关’进行比较,如果接收到的数据是0xff就将pP33口置为高电平(打开台灯),反之接收到的数据是0x00就将pP33口置为低电平(关闭台灯)。单片机的P33口又和继电器的控制端口连接(这个我们之后会具体分析的)。
void interrupt4() interrupt 4//4号中断 处理函数
RI=0;//取消此次中断申请
if(SBUF==0xff)//开灯
p33=1;//单片机P33口置为高电平
else if(SBUF==0x00)//关闭
p33=0;//单片机P33口置为低电平
temp=SBUF;
在中断函数中,处理完所有操作之后都会将flage置为1。在main函数中有一个无限循环,其中如果flage=1的话 就通过SBUF发送数据给手机端的蓝牙。发送的temp就是收到之前接收到的数据,还记得在之前分析Android端BluetoothTool的接收函数的时候,有说到如果手机成功发送了一个开灯命令给单片机,单片机收到之后成功控制继电器将台灯打开之后,单片机会回发一个消息0xff给手机。因此手机端只要收到0xff这个消息,就知道台灯打开成功了。具体发送过程就是在下面的代码中完成的,至于代码中ES
TI这些都是和串口编程有关的,个人建议去看看视频教学比较好。
if(flage==1)
ES=0;//不允许串口产生中断 保证此次操作安全
SBUF=//发送数据
while(!TI);
TI=0;//取消此次中断申请
ES=1;//允许串口产生中断
3.继电器(1路继电器模块带光耦隔离 支持高低电平触发 5V 一路)
继电器模块接口有1、DC+:接电源正极(电压按继电器要求,有5V.9V.12V和24V选择)2、DC-:接电源负极3、IN:可以高或低电平控制继电器吸合。 IN端是用来控制继电器公共端是和常闭端连接还是和常开端连接用的,如果IN端是高电平那么继电器的公共端就和常闭端连接,反之公共端和常开端连接。我是将IN端和单片机的P33口连接,通过改变单片机P33端上的电平,从而改变继电器IN端的电平,达到控制继电器开合的效果。这里非常有必要说明一点,就是继电器的IN端和单片机的哪个口连的问题。不是所有的端口都可以连得,要接有上拉电阻的端口才可以,因为如果没有接上拉电阻的端口就算在代码中将该端口置为1,实际中该端口电压达不到高电压,只有接有外接电阻端口的电压才能达到高电压。至于怎么判断单片机端口是不是有接外接电阻有两种方法,一看单片机(开发板)的结构图找到接有外接电阻的端口,二是自己一个一个试过去。如代码所示,打开台灯的时候将P33口置为1(1是高电平
0是低电平)。
继电器输出端:1、NO:
继电器常开接口,继电器吸合前悬空,吸合后与COM短接 2、COM:继电器公用接口 3、NC:
继电器常闭接口,继电器吸合前与COM短接,吸合后悬空
if(SBUF==0xff)//开灯
p33=1;//单片机P33口置为高电平
else if(SBUF==0x00)//关闭
p33=0;//单片机P33口置为低电平
台灯方面主要就是将台灯的一根导线(零线或者火线)弄断,然后两端分别继电器的NO(继电器常开接口) COM(继电器公用接口)连接就好。这里要注意,台灯要是那种USB接口的,USB接口的有降压器会将220V降下来的。千万不要用那种不是USB的,那种电压太高太危险了,而且继电器也承受不了这么大的电压,要买相应的继电器。
5.单片机代码
#include &reg52.h&
unsigned char flage,
sbit p33=P3^3;//单片机P3.3口
void main()
TMOD=0x20;//设置定时器1为工作方式2
// 波特率=9600时定时初值为FDH
TH1=0//装载TH1
TL1=0//装载TL1
TR1=1;//启动T1(定时器1),开始计数
REN=1;//允许串行接收
//SM0=0 SM1=1 为工作方式2
EA=1;//开启总中断
ES=1;//允许串口产生中断
if(flage==1)
ES=0;//不允许串口产生中断 保证此次操作安全
SBUF=//发送数据
while(!TI);
TI=0;//取消此次中断申请
ES=1;//允许串口产生中断
void interrupt4() interrupt 4//4号中断 处理函数
RI=0;//取消此次中断申请
if(SBUF==0xff)//开灯
p33=1;//单片机P33口置为高电平
else if(SBUF==0x00)//关闭
p33=0;//单片机P33口置为低电平
temp=SBUF;
到这里手机控制台灯的开关有关内容都已经介绍完毕,大家不妨自己动手做一个,挺有趣的。
Android端项目github地址:
单片机端项目:
单片机有关的资料:
如果手机控制台灯开关的做出来了,大家也可以做做手机控制台灯暗亮的,可以用电阻来做的哈,
没有更多推荐了,

我要回帖

更多关于 台灯品质控制计划 的文章

 

随机推荐