昨天弄了个显示屏幕,今天发现开发板上还有一个温度传感器,DS18B20,一不做二不休啊,结合屏幕,按键,做个温度计来试试。
温度获取
首先就是这个传感器,原理图上看到是用的GPIO26。
首先想到的是通过GPIO模拟一线协议,把STM8单片机那一套拿过来,跑了一遍,发现读不出来数据……
又换了网上的另一套代码,无非也就是延迟不同,结果……还是读不出来。
不死心啊,
这里传授一下我工作多年不加班的奥秘
换个方式!!!!!!
然后就开始研究,有没有现成的一线协议的用法,终于被我发现在在openwrt中,就包含了一线协议及用户定制的一线协议模块。那还等什么,拿来吧!
模块位置在
Kernel modules —>
W1 support —>
选中之后编译出来,就能够找到该模块了。
重点讲一下这个模块的用法。网上搜了一圈,也没找到,不过找到了一个i2c总线的模拟方式,结合昨天模拟spi的方式,猜测出来了这个命令的用法,首先来看一下这i2c总线的模拟
insmod i2c-dev
insmod i2c-gpio-custom bus0=0,18,22
18 22就是模拟I2C的两个GPIO
然后看一下spi的模拟
insmod spi-gpio-custom bus0=1,20,19,22,0,10000000
20,19,22就是模拟SPI的GPIO
那么,
我们顺水推舟,
顺藤摸瓜,
顺流而下,
摸索出来了一线协议的方法
insmod w1-gpio-custom bus0=1,26,10000
bus0=1,就是一个编号,后面跟着的就是一线协议用的gpio,最后是传输速率。
我真是太机智了。
然后就是读取数据,这个一线协议创建出来的设备可以直接读取
使用下面命令读取下面的文件,就可以得到温度结果
root@ZhuoTK:/# cat /sys/devices/w1_bus_master1/28-*/w1_slave
36 02 ff ff 7f ff ff ff de : crc=de YES
36 02 ff ff 7f ff ff ff de t=35375
其中t就是温度。
我们通过shell命令来截取出来这个字段,并且传化一下为float格式
root@ZhuoTK:/# cat /sys/devices/w1_bus_master1/28-*/w1_slave | grep "t=" | awk -
F 't=' '{printf("%.2f",$2/1000)}'
35.25
帅不帅
按键控制
开发板接了这个屏幕,就会一直亮起来,我们需要通过按键来控制温度显示程序的启动
openwrt中的按键定义,位于代码的这个文件中,当然是和架构有关的。
build_dir/target-mips_24kc_musl/linux-ar71xx_generic/linux-4.4.79/arch/mips/ath79/mach-tl-wr720n-v3.c
前面定义了按键的GPIO
#define TL_WR720N_GPIO_BTN_RESET 15
#define TL_WR720N_GPIO_BTN_SW1 14
#define TL_WR720N_GPIO_BTN_SW2 16
#define TL_WR720N_GPIO_BTN_SW3 1
后面定义了触发方式
然后就需要在系统的配置文件中,增加按键的触发脚本
位于/etc/config/system中
参考BTN_0,增加了BTN_1的功能,就是修改了一下min和max的时间,这个是控制长按和短按的时间,0-3表示短按,5-30,表示长按。handler表示执行脚本。
显示
这一部分结合前面的文章,将温度读取出来,转化为浮点数显示,或者直接以字符串形式显示,均可以
void get_temp_w1(float* data)
{
char cmddata[64]={0};
cmd_get_result("cat /sys/devices/w1_bus_master1/28-*/w1_slave | grep \"t=\" | awk -F 't=' '{printf(\"%.2f\",$2/1000)}'", cmddata, 64);
printf("get_temp_w1:%s\n",cmddata);
*data=(float)atof(cmddata);
}
int main(void)
{
unsigned char i,m;
float t=0;
GPIO_Init();
SPI_Init();
ILI9341_Init(); //初始化OLED
ILI9341_Clear(BLACK);
BACK_COLOR=BLACK;
while (1)
{
get_temp_w1(&t); //读取温度值
ILI9341_ShowNum1(80,95,t,5,WHITE);
sleep(10);
}
}
其他部分代码可以从前面的文章中回顾一下
openwrt开发–ILI9341屏幕显示开发
结果发现
这个温度不准确,因为它在板子中间,靠近发热的CPU……这特么谁设计的,真是人才
参考博客
openwrt控制gpio的方法
结束语
昨日听闻公司走掉的同事,通过远程登录的方式,删除了他在服务器中的代码。我觉得这种方式是太不理智了,其实拖欠的工资,直接仲裁就可以了,百分百会给你,何必走这种方式呢?
公司拖欠工资并不会对老板有什么大影响,可这种远程删除数据的方式,真是有点严重啊。
那还是来给大家科普一下吧
我国《中华人民共和国刑法》规定如下:第二百八十六条 【破坏计算机信息系统罪】
违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照第一款的规定处罚。
对于个人而言,无非就是三种,增删改功能,增删改数据,传播病毒
虽然定罪标准是是否造成严重后果
这玩意就看领导强调不强调了,非要是说你影响了项目完成,你真是百口莫辩!
即便没有犯罪,也有可能违法,还是三思啊!!
你还年轻,千万不要走上违法犯罪的道路啊!你是程序员啊,删什么代码啊,你忘了你最擅长什么了吗