关闭

zigbee网关 android客户端编写温度计功能

标签: zigbee网关LM75Aandroidtcp
1030人阅读 评论(0) 收藏 举报
分类:

参考如何在Android手机上画温度计?

但是不符合想要的需求。需求是温度是外界控制的,通过tcp传进来的;并且温度计的量程也太小了,最好在室温以内;最好能添加显示当前温度;温度计你最好在画面中间显示;经过修改后的画面如下:



布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/ipport"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
           
            android:hint="@string/ipport_hint"
            android:text="@string/ipport_text" >
        </EditText>

        <Button
            android:id="@+id/StartConnect"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusableInTouchMode="true"
            android:text="@string/StartConnect_name" />

    </LinearLayout>

    <SurfaceView
        android:id="@+id/surface"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>



定义几个成员变量指示温度计的属性

	private static final int TOP = 40; // 温度计距离顶部的位置
	private static final int PIX1DEGREE = 30; // 温度计每一摄氏度占用的像素数
	private static final int BEGIN_DEGREE = 15; // 温度计量程起始温度
	private static final int END_DEGREE = 35; // 温度计量程终止温度
	private static final int WIDTH = 40; // 温度计的宽度



对draw函数进行了修改,主要把原先的定值改为可以变化的

/*
 * @author fanruitian 
 * @QQ 1021200380
 * @date 2015.11.20
 * */	
private void draw(String temp) {
		int HEIGHT = (END_DEGREE - BEGIN_DEGREE) * PIX1DEGREE; // 矩形的高度
		float tem1 = Float.parseFloat(temp);
		Canvas canvas = mHolder.lockCanvas();
		Paint mPaint = new Paint();
		mPaint.setColor(Color.BLACK);
		canvas.drawRect(0,0,canvas.getWidth(),canvas.getHeight(),mPaint);
		
		//Paint mPaint = new Paint();
		mPaint.setColor(Color.WHITE);
		// 画一个居中的距离顶部TOPpx,长宽分别为WIDTH和HEIGHT的矩形
		canvas.drawRect(canvas.getWidth() / 2 - WIDTH / 2, TOP,
				canvas.getWidth() / 2 + WIDTH / 2, TOP + HEIGHT, mPaint);
		Paint paintCircle = new Paint();
		paintCircle.setColor(Color.RED);
		Paint paintLine = new Paint();
		paintLine.setColor(Color.BLUE);
		// 画红条代表当前的温度
		int y = TOP + HEIGHT - (int) ((tem1 - BEGIN_DEGREE) * PIX1DEGREE);
		System.out.println(y);
		canvas.drawRect(canvas.getWidth() / 2 - WIDTH / 2, y, canvas.getWidth()
				/ 2 + WIDTH / 2, TOP + HEIGHT, paintCircle);
		// 在矩形的底部画一个半径为WIDTH的圆,稍稍往上WIDTH/4个像素,这样就不是相交的了
		canvas.drawCircle(canvas.getWidth() / 2, TOP + HEIGHT + WIDTH - WIDTH
				/ 4, WIDTH, paintCircle);
		int ydegree = TOP + HEIGHT;
		int tem = BEGIN_DEGREE;
		int i = 0;
		while (ydegree > TOP) {
			canvas.drawLine(canvas.getWidth() / 2 + WIDTH / 2, ydegree,
					canvas.getWidth() / 2 + WIDTH / 2 + 7, ydegree, mPaint);
			if (i % 10 == 0) {
				canvas.drawLine(canvas.getWidth() / 2 + WIDTH / 2, ydegree,
						canvas.getWidth() / 2 + WIDTH / 2 + 7, ydegree,
						paintLine);
				// canvas.drawLine(60, ydegree, 72, ydegree, paintLine);
				canvas.drawText(tem + "", canvas.getWidth() / 2 + WIDTH / 2
						+ 10, ydegree + 5, mPaint);
				tem++;
			}
			i++;
			ydegree = ydegree - PIX1DEGREE / 10;
		}
		paintCircle.setTextSize(70);
		paintCircle.setTextAlign(Paint.Align.CENTER);
		canvas.drawText(tem1 + "℃", canvas.getWidth() / 2 - 10,
				canvas.getHeight() - 55, paintCircle);
		mHolder.unlockCanvasAndPost(canvas);// 更新屏幕显示内容
	}


再就是添加一些tcp功能,用于打通网络处理字符串,启动一个线程用于接收数据处理数据

	// 线程:监听服务器发来的消息
	private Runnable mRunnable = new Runnable() {
		public void run() {
			//bConnect.setText("停止连接");
			String msgText = eIpPort.getText().toString();
			int start = msgText.indexOf(":");
			String sIP = msgText.substring(0, start);
			String sPort = msgText.substring(start + 1);
			BufferedReader mBufferedReaderClient = null;
			int port = Integer.parseInt(sPort);
			try {
				// 连接服务器
				mSocketClient = new Socket();
				mSocketClient.connect(new InetSocketAddress(sIP, port), 3000);
				// 取得输入、输出流
				mBufferedReaderClient = new BufferedReader(
						new InputStreamReader(mSocketClient.getInputStream()));
				// break;
			} catch (Exception e) {
				//bConnect.setText("开始连接");
				e.printStackTrace();

			}
			char[] buffer = new char[512];
			int count = 0;

			try {
				while (bRun) {
					if ((count = mBufferedReaderClient.read(buffer)) > 0) {
						String recvMessageClient = getInfoBuff(buffer, count);
						System.out.println(recvMessageClient);
						ProcessData(recvMessageClient);
					}
				}
			} catch (Exception e) {
				//bConnect.setText("开始连接");
				e.printStackTrace();
			}
		}

	};

为了一打开软件就能看到画面需要在合适的时候调用draw函数

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		this.draw("15");
	}


简单的测试一下,向手机发送字符串

{"From":"Endian","Addr":"8021","Type":"Message","Content":"Temperature:27.4"}

看一下手机接收的图片,如上图所示

成功

更多资料请参考 http://web.nenewind.com

0
0
查看评论

Android shell 命令设置(获取)IP地址、网关、dns

转自 http://www.biemmeitalia.net/blog/android-network-configuration/ 通过shell命令设置(获取)IP、网关、dns信息,需要获取root权限 查看所有网络信息 C:\>adb shell root@android:/...
  • Liuqz2009
  • Liuqz2009
  • 2016-08-02 14:55
  • 7760

Android 命令设置获取、IP地址、网关、dns

通过shell命令设置(获取)IP、网关、dns信息,需要获取root权限 查看所有网络信息 C:\>adb shell root@android:/ # netcfg netcfg ip6tnl0 DOWN 0.0...
  • zhang__ao
  • zhang__ao
  • 2017-10-17 17:16
  • 779

WIFI项目--Android 获取本机IP(wifi下),子网掩码,网关,dns等信息

近期在捣鼓一个小项目,利用wifi热点在两手机上传输文件。进度有点慢,下面是遇到的一些小问题: 1获取手机所连接的wifi路由器ip:ublic class MainActivity extends Activity { private WifiManager my_wifiManage...
  • u011484134
  • u011484134
  • 2015-10-24 20:41
  • 434

Andriod和Zigbee在智能家居系统中的应用

引言 随着物联网技术的不断发展,家居智能化已经不再是天方夜谭,越来越多的智能家居产品正在占据市场份额。智能家居就是应用电子技术、无线通信技术等,让生活环境中的家用电器、安防设备等可以通过无线网络实现远程控制。从而提高人们的生活舒适度和安全性,进而提高人们的生活质量。 ...
  • liqingkk
  • liqingkk
  • 2015-05-12 22:44
  • 2408

13-7-6 android底层与zigbee通信

看着Android的发展心里很是欢喜,对于有硬件基础的我们当然可以选择Android应用+硬件产品 = 单片机+大屏幕+硬件产品+网络设备,同时价格、稳定性、通用性、美观性、开发难度,Android让我欣喜不已,不是为了逃避难度,只是真心觉得它太棒了~ 这里我选择描述一下Android与zigbee...
  • feiyangxiaomi
  • feiyangxiaomi
  • 2013-08-02 10:45
  • 12903

在安卓中实现Zigbee串口设备采集模块

前段时间做了一个移动开发的嵌入式项目,目前有时间所以写这篇博客,第一次写,多有不对望指正 好入正题,希望通俗易懂 安卓系统是架构在Linux上的,如果要将一个串口设备让应用层APP识别,或者说将数据读取出来应该有一下的几个必要的事要做 1、APP是用java写的,因此要实现Java调用C/Cp...
  • my_wlggy
  • my_wlggy
  • 2016-09-28 00:27
  • 713

安卓通过串口控制zigbee

安卓通过串口控制zigbee
  • bilifo
  • bilifo
  • 2016-01-13 14:04
  • 2004

android自定义view——温度计

public class Themometer extends ImageView { private Paint mPaint; private int height, width, circle_radius; private int COLOR_BROWN = Color.parseC...
  • mxw3755
  • mxw3755
  • 2015-09-22 19:10
  • 2463

android:自定义温度计View

自定义一个View,实现温度计的功能 看完鸿洋大大的博客其中一篇关于自定义view的文章http://blog.csdn.net/lmj623565791/article/details/24252901,受益良多决定自己一试,并记录下自己的心得。关于编写自定义View的步骤,请大家阅读鸿洋大大的...
  • CuriousX
  • CuriousX
  • 2016-08-24 15:44
  • 794

Android自定义View实战---圆盘温度计

了解了基本的自定义view基础后,现在我们就来实践下自定义view,也是看到我华为手机上自带的天气预报软件后,想着模仿做一个,于是,我自己尝试了下,虽然不算太像,但是还算能看,期待后期的改进。 通过本文你可以用到以下技术: 1)view的测量 2)canvas绘图技巧 3)接口回调 4)触摸事件的处...
  • android_cmos
  • android_cmos
  • 2016-07-30 20:09
  • 2285
    个人资料
    • 访问:105027次
    • 积分:1632
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:1篇
    • 译文:0篇
    • 评论:11条
    文章分类
    最新评论