openwrt开发--DS18B20的使用

昨天弄了个显示屏幕,今天发现开发板上还有一个温度传感器,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的方法

结束语

昨日听闻公司走掉的同事,通过远程登录的方式,删除了他在服务器中的代码。我觉得这种方式是太不理智了,其实拖欠的工资,直接仲裁就可以了,百分百会给你,何必走这种方式呢?
公司拖欠工资并不会对老板有什么大影响,可这种远程删除数据的方式,真是有点严重啊。

那还是来给大家科普一下吧

我国《中华人民共和国刑法》规定如下:第二百八十六条 【破坏计算机信息系统罪】
违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照第一款的规定处罚。

对于个人而言,无非就是三种,增删改功能,增删改数据,传播病毒

虽然定罪标准是是否造成严重后果

这玩意就看领导强调不强调了,非要是说你影响了项目完成,你真是百口莫辩!
即便没有犯罪,也有可能违法,还是三思啊!!

在这里插入图片描述
你还年轻,千万不要走上违法犯罪的道路啊!你是程序员啊,删什么代码啊,你忘了你最擅长什么了吗
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值