Archive

Archive for August, 2009

在Ubuntu 8.04 LTS 下安装使用飞鸽传书 IP Messenger 0.9.6

August 20th, 2009 LT 2 comments

IP Messenger (中文名称:飞鸽传书,以下简称IPMsg)是一款很方便在局域网内收发消息和传输文件的工具,通常我们常见的是Windows下的版本,其实IPMsg提供了其他平台下的版本,比如Linux。现在Ubuntu越来越火爆,也许你正在使用Ubuntu,而你的朋友还在使用 Windows,怎么用飞鸽和他(她)交流呢,本文则介绍了在Ubuntu下编译安装IPMsg简体中文版的过程。

Ubuntu下,可以用Firefox浏览器或者wget下载源文件 http://www.ipmsg.org/archive/g2ipmsg-0.9.6.tar.gz

可能在我们正式安装前,需要安装一些编译环境所需要的软件包,运行下面命令进行安装

sudo apt-get install build-essential gettext intltool libxml-parser-perl libgnomeui-dev libpanel-applet2-dev gstreamer0.10*-dev

下面正式开始安装,依次执行下面命令:

irobot@irobot-desktop:~$ wget http://www.ipmsg.org/archive/g2ipmsg-0.9.6.tar.gz
irobot@irobot-desktop:~$ tar xvfz g2ipmsg-0.9.6.tar.gz
irobot@irobot-desktop:~$ cd g2ipmsg-0.9.6/
irobot@irobot-desktop:~/g2ipmsg-0.9.6$ ./configure –prefix=/usr –sysconfdir=/etc –enable-systray –with-ext-charcode=CP936
irobot@irobot-desktop:~/g2ipmsg-0.9.6$ make
irobot@irobot-desktop:~/g2ipmsg-0.9.6$ sudo make install

如果没有出错的话,重启系统,就可以在“应用程序”->“附件”里面发现飞鸽的图标。点击运行。还需要设置的一点是把 “字符编码的外部代号”设为CP936,不然从Windows XP传过来的中文文件名会显示乱码。

测试从Windows XP向Ubuntu传了一个300M的文件,传输正常。

P.S.飞鸽传书的网站
英文站:http://www.ipmsg.org/index.html.en
中文站:http://www.ipmsg.org.cn/

Categories: 杂项 Tags: ,

Arduino 和 LM75 的 I2C 总线通讯

August 8th, 2009 LT 4 comments

Arduino 是一个开源单片机平台。前两天得到一块测温IC模块,LM75,正好有机会研究下Arduino的 I2C 通讯功能。关于I2C总线的知识,可以在这里找到。

LM75 是一个I2C接口的测温元件,外围电路仅仅需要一枚电容,它的datasheet可以从官方网站上下载到 (点击这里下载),具体的spec这里就不多讲了,感兴趣的可以查看它的datasheet。说到这里,很是感慨,就这么一个4mm*5mm见方的小东西,手册却一点也不含糊,详详细细介绍了所有的功能。其实,有时候看元器件的手册对扩展知识面也很有帮助。LM75的主要功能是测温,本文的目的就是如何应用Arduino和LM75来获取当前的温度,核心是Arduino的I2C协议的应用。

看LM75的datasheet,会知道它是作为slave,地址是7-bits,1001A2A1A0,我手里这个A2\A1\A0都是短接地的,所以地址就是1001000,继续查找手册,温度的指针寄存器是00000000,温度的格式是16bits,前面8bits最高位是MSB,若MSB为1,表示为负,后面8bits的最高位是LSB,为 0.5度。为了简化程序,我们只取温度的整数部分,即D15-D8。

再看Arduino的Wire库的应用,Arduino作为master,首先要向I2C总线上的LM75地址发送读取温度寄存器的指令,即00000000,这一步本程序版本0.01暂不考虑,因为LM75上电后,指针寄存器里的指针即指向温度寄存器, 然后读取一个byte就可以得到温度的高8位,即整数值。

让我们看程序:(版本0.01)

#include <Wire.h>

void setup()
{
Wire.begin();        // join i2c bus (address optional for master)
Serial.begin(9600);  // start serial for output
}

void loop()
{
Wire.requestFrom(B1001000, 1);    // request 1 byte from adress 1001000

while(Wire.available())
{
int temp = Wire.receive();
Serial.println(temp);
}

delay(500);
}

上传到Arduino后,打开Serial Monitor ,就可以在下部的窗口里读到温度值。

哈,我现在室内温度是28度!看来南京最近的天气还是比较凉快的!

Categories: 杂项 Tags: ,