粉丝2381获赞1.9万

呃,现在讲解的是基于五幺单片机的一个智慧大棚系统,在整个系统中是对三路的一个湿度和三路的肥料进行一个检测,同时对整个温室大棚的温度进行一个检测, 在这里面检测采用的是 adc 零八三二的一个 adc 模块,用来实现 ad 转换,然后温度传感器使用的是 ds 幺八 b 二零针对于每个呃参数都进行了一个 呃补偿外设,分别来进行一个温度,湿度和肥料的一个补偿。系统中通过按键来进行一个预值的设定,同时通过 lcd 幺六零二进行一个人机交互界面,当存在参数超过设定预值时,启动蜂鸣器进行一个报警,下面开始功能的一个演示。 呃,整个系统运行起来以后,呃通过显示屏分别显示 呃,湿度一、湿度二、湿度三,肥料一,肥料二,肥度肥料三和温度传感器和温度信息。呃,温度信息为什么朝后面拉了一位,是因为它带负号进行一个显示,可以进行演示一下,如果我现在是负的话,就是负零二,负零五, 然后对于按键,通过点击设置可以看到光标闪烁的位置,可以通过加和减进行一个预值的一个设置, 然后通过再次按键按下设置,按键可以进行一个位置的切换,然后当切换完成后会跳回到数值显示界面,当进行当我的参数调整超过设定的预值时,此时我先用的一个, 同时我可以看到肥料的一个继电器变成低电瓶,这个这个继电器进行一个使 能,然后当我就是说还原以后低于预热后,然后我的一个灯亮,同时它也变成一个高电瓶,相当于非使能,然后整个系统就是这个样子。

好,这个项目是基于五幺电瓶的智能交换大棚,我们介绍一下主要模块,总共是五幺电面积 o l d 屏幕电视幺幺,然后这边是一个警报器,一个蓝牙模块,光明传感器,土壤湿度传感器,两个继电器分别模拟的我们的水泵和我们的风扇,然后有四个按键,我们将线插上之后点击启动停。之后呢,我们看到主界面上有温度、湿度、光照和土壤,然后呢我们先检测一下它的光照, 我们用光照放上去,这个灯就灭了,放上去光就亮了,然后当湿度过 高时会进行报警,当光照过强时会进行补光,当土壤湿度过低会打打进电器,现在我们可以看到这两个,这个这个进电器是亮亮两个灯的,说明他已经打开了,我们这时候呢把我们土壤湿长期用纸给裹着,哎,发现他灭了,这就是开启我们的水泵,然后打开就是水泵进行浇水, 然后这个排风扇的话,我们需要看温度啊,温度的话,呃,然后我们将温度先调低一点, 现在温度十七度,我们再调低点,像十六度。好,这个时候我们可以看到我们的温度过高时,我们这个排风扇,排风扇就会打开,然后 然后我们这个灯也打开了。好,我们现在来到第二个界面进行调节,增大减小,增大减小,这些都可以调节的。然后第三个界面的话就是手动界面,我们可以开启开启形式灯,关闭形式灯,补光灯,开启补光灯,关闭补光灯,然后排风扇开启排风扇,然后抽水泵开启关闭。 好,我们现在呢,呃,回到主界面之后呢,我们呃依旧是打开我们手机 app, 手机 app 呢我们找到这个 g、 d、 y、 y 三幺,点击连接第四密码是一二三四,然后我们点击对话框模式,然后清除一下,然后这时候是显示我们的全部内容。好,我们来到第四个界面, 呃,这时候呢我们也是,呃,这时候我们要点击编辑模式,打开,打开第一个,点击这个 h e、 x 给它打开,然后改成四一,第二个就四三四四,然后把它关闭。之后呢我们就可以调节这个它的域值和开关,比如说我们 切换一下,然后呃增大减小,增大减小,然后切换增大减小,切换增大减小,然后第三个界面的话就可以开启,呃,开启关闭,然后这边就关闭了,然后切换开启关闭,这边就关闭,然后呃这边是开的,我们就把它呃给它关闭 这个这个警示灯的话,它不怎么亮,但是能看到,然后呃这个补光灯的话,打开补光灯就打开关闭。好,这个就是我们的全部内容。

哈喽,小伙伴们许久未更新 esp 三二项目了,今天给大家带来一个基于 esp 三十二单片机的智慧农业智能大棚毕业设计项目系统实现的功能有,土壤湿度监测、光照强度监测、空气温度监测、 空气湿度监测、自动浇水自动加湿自动通风、自动补光。浏览器通过局域网控制, 可以设置实时显示传感器数值,可以设置自动预值,可以手动操作。先来看看手动操作打开通风扇手动操作打开补光灯手动操作打开加湿器手动操作打开抽水泵触摸光强传感器 看看光照变化触摸温湿度传感器看看温度湿度变化。土壤湿度传感器插入水中看看数值变化。手机浏览器可以设置自动设备的预值、浇水、加湿、 补光、通风的预值。这套系统非常适合作为单片机毕业设计使用,也可以作为智慧农业智能大棚互联网项目科教比赛使用。

好,这个项目是基于五幺单片机的智能搭房系统,首先我们来看下它主要模块,一个五幺单片机,一个 d s t 幺幺空气中的温湿度,一个 h c 零五蓝牙模块,一个呃 o l e d。 屏幕,两个警示灯,一个是补光灯,一个是警示灯,然后有四个按键,分别控制我们的 界面切换和调节与笔直。然后一个光敏传感器,一个土壤湿度传感器,两个这个继电器分别控制我们的排风扇和我们的抽水泵,然后我们对系统上电,上电之后需要拿一块纸进行包裹,然后呢 包裹了之后呢,我们现在来首先看一下这个土壤湿度它的功能,我们把它拿掉, ok, 这个抽水泵开始工作,然后呢我们再把这个纸给它包包上。 好,然后呢我们来碰下这个光敏, ok, 大家可以看到这个补光灯它打开了,然后呢?嗯,第三步我们来看一下这个空中的温湿度,温湿度的话我们看它的预值是十五和三十七,我们嗯调给它调低。 ok, 排风扇打开了,然后呢 然后这上面还有一个,嗯,有一个气囊没有插上去。 然后呢我们来接下来检测我们的空气湿度,湿度的话,我们把它的纸调小一点,调到九十一,然后对它吹气。 ok, 这时候这个呃蜂鸣器就会进行报警。然后呢接下来呢我们检测它,然后我们来控制我们我们的下位机,然后补光灯,抽水泵打开,关闭,呃,警示灯打开,关闭, 补光灯关闭。然后呢接下来呢我们连接蓝牙,首先拿出我们的 app, 找到 b t b 零 t 四, b t 零四,然后呢?我们现在来控,来控制一下它的界面。 嗯,增大减小增大减小增大减小增大减小。打开关闭打开关闭打开关闭,打开关闭,然后呢?这就是我们的全部内容。


大家好,下面给大家演示一下这个大鹏温湿度检测报警器。首先我们看一下这个电路板, 电路板上面这个是一个定位器,这个定位器的话是用来调节这个液晶显示屏的一个清晰度, 然后下面这个是液晶显示屏的接口,这边一个蜂鸣器,当呃这个采集到温湿度数值的话,超过我们设定的上下线的时候,他就会发出一个蜂鸣器的鸣叫声,这是一个纯属芯片,我们设置好的一个上下线的一个限制的话,它存储到这个纯属芯片里面, 然后接下来这是一个五幺单片机,下面这个是五幺单片机下一口,然后这个接口的话是一个呃温湿度传感器,贴起 d h t 幺幺这个温湿度传感器的一个接口,然后旁边这三个键的话是一个功能键,设置键,加子键,然后减子键,这个希望可以设置我们的温湿度的一个限制。 然后这是两个直灯,绿色直灯的啊,表示我们的温湿度的啊处于正常状态,然后这红色灯亮的话,它就表示我们的温湿度的话有超速我们设定的一个范围。 然后这是一个电源接口,下面个电源开关,首先我们将这个液晶显示屏的接上去,然后接上我们这个,呃, dht 幺幺这个温湿度传感器,接的时候再看这个网格,这个部分的啊,是朝外面 这样子接上去啊,插好,插好之后呢,我们接上我们这个电源,然后打开这个电源开关往左拨, 现在给大家现在开始显示的话,呃第一行是显示我们的湿度值,然后第二行是显示我们的温度值,因为我们现在今天我们这边的话下雨,所以说湿度会比较高, 我按下第一个按键的话可以进入设置,首先是设置这个湿度的声音值,设置时候这个值的话他会再闪,你可以清晰的看到,然后按第一个按键的话可以切换,然后按第二个的话可以加减加减控制, 按顺序一个个进设置,设置好之后的啊,进退出来,退出来就可以了,然后我们设置的时候短下限值的话是不能高超过我们上限值,上限值的话是不能低于上限值啊,这是 你看现在的话是,嗯,现在湿度的话是八十一,那我们通过手这边摸一下的话是八十一,那我们通过手这边摸一下气的啊,他这个湿度马上就会发生变化, 也是非常灵敏的,它超过我们的设定值的话,它就发出呃蜂鸣器鸣叫声,然后这是灯亮,然后我们是温度短,我们可以通过打火机来烧,但是这个是一个塑料壳,所以说我们烧的时候非常注意,然后烫一下它就可以,就可以拿开, 然后我们这个对着它烧的时候会喷出那个气体的话,它这个里面湿度就会感应到,对到后面这边来 还超过我们设定值三十八四十度度啊,他同样也会发出声光的一个报警提醒,主要就给大家演示到这里,谢谢大家。

大家好,这是一款巨大面积的一种箱控制型的设计,接下来我来演示一下功能。首先给系统上电之前要给板子配置一个热点, 把自己手机的热点名字改成 esp 八二六六 a, 密码是一二三四五六七八,注意这个字母全是大写。配置好热点之后,再将电线插到电源座上 啊,这个呢是电源总开关,插上电线之后按下总开关,这个时候它会连接热点,连接上热点之后,那它就具备了联网的功能啊,同时连上热点之后,它会与平台的服务器进行连接, 连接上之后他就会实时的发送数据啊,实时的给运平台发送数据。好,你们看到现在已经连接上了,连上之后显示屏上上面显示数据, t 是 温度, h 是 十度, c 是 二氧化碳,二氧化碳开机之后,由于需要预热一会,所以刚开始的时候是零,然后这个呢是二氧化碳模块,预热一会之后才会出现数据,然后后面这个是光照 l, 代表是光照 传感器,这个是 d d t 幺幺温收转气,检测环境温湿度的,我们手插着这个传感器,手表潮湿的话,看到湿度值会增加,然后湿度超标的时候啊,这个这个这个集电器闭合,然后这个灯这个风扇会转,进行通风除湿。 然后还有一个是这边的按按钮,现在这个报警应该是这个二氧化碳超标了,你可以进去看一下, 二氧化碳五百二十,我们先设置稍微高一点,长按它呢可可以快速增加,如果按一下的话,它会每次加一减,也是长按快速减小, 同时这些设置具有调电机的功能,所以我们设置好之后,下次再开机,它还是我们最新的纸, 我们先看其他纸,我们先看一下设置,一个一个看一下啊,这个 t l 是 温度下限,还可以通过加减修改,那现在我们来给它随便改几个,都改到二十五吧,这温度上限四十五, 然后湿度下限也是光照,光照只有一个,下限只有一个,然后再按二氧化碳。 好,现在我们全部设置好之后,再一下设置,恢复到正常界面之后啊,这个时候啊,他就 啊会记保存刚才的设定值,现在是温度低于了下线之后这个继电器闭合灯亮,然后报警,这个接的是一个加热片进行加热, 现在我们可以来,比如现在关机复位也可以,或者断电重启也可以。这个时候我们可以进去看一下它的值是没有啊?还是保存的是我们之前进行设置的时候的值。 这时候我们可以打开我们的微信,我们这个地方有有我们的设备, 你进去看一下温度下线,上线都是我们刚才设定好的纸,现在是温度低于了下线了,我们把下线设置低一点, 当启动载之后,显示屏变得比较暗,那是因为这个功耗,加热片功耗比较大,所以 啊,所以这个拉低了显示屏的亮度啊,这个是正常现象啊,然后你看手机上面这个是登录了自己的听歌账号啊,现在这边显示的是一个呃,智能移动箱的一个设备,点开点进去之后 啊,如果发现是灰色的话,说明他没有连上网。嗯,看下热点,你可以复一下他,重新连一下 他,只有连上热点之后啊,才可以进行网络通讯,现在连接上, 好,当这个点都变成蓝色的时候,说明啊已经连接上了,这个时候手机上面显示的温度、湿度、二氧化碳浓度、 光照强度一共四个数据,以及当温度比如温度上限超标了啊,这个会处于开启状态,然后还有六种报警状态,温度上线、下线,还有二氧化碳上线,光照下线, 同时我们点点这个,呃,小蓝点啊,会看到他的一个一些历史数据,比如说温度的这个曲线图,以及还有他的一个历史啊,历史数据啊,都可以看到不同时间段的一个历史数据, 同时也可以通过手机来进行上下线设定。我们点直接点一下数据,然后点这个数据下方,比如想设置温度上限啊,就是设置 t h 冒号,然后比如想设置个六十,然后再加一个井作为结束符,完成,然后点击发送数据,发送成功,这个时候温度上限又变成了六十,你可以进去看一下 这个温度上限变成了六十,同理,其他的都一样啊,设置温度下限是发送 t l, 如果忘了的话,我们可以看一下这个,这个 t 是 代表的温度 l 是 下线,然后后面跟两位数,最后加一个井啊,就可以了,然后上线是 t h, 然后啊这个下线是湿度是 h, 然后加 l, 比如像设置湿度啊,湿度上限,湿度下线是 h l, 湿度上限是 h h 啊,都是大写的,我们可以设一个看看, 我们先 h h 蛮好,比如我想设置到七十八,这样讲,这个是十度上限,嗯,好,设置好之后我们进去看一眼啊,变成七十八,然后设置光照跟二氧化碳, 直接因为 l 光照是只有一个下线,所以只用只要发一个 l 就 行了。注意这个光照跟暗化碳是报警值,是三位数啊,即使你想设置低于一百的,你也要前面补充零,比如你想设置个嗯 二十五,你要发送零二五,然后加井号好平接发送就可以了。如果包括暗花碳也是是发送 c, 然后后面也是三位数,这个比如像设置了一二三,然后加回车加一个井号 发送,这个时候啊,因为二氧化碳高于了我们设定的值,所以这个就开始通风,同时可以看到手机上面这边显示二氧化碳报警,你进去看一下, 这是刚才的光照射入一百二十五,然后二氧化碳一二三 啊,这个设置的太低了啊,如果我们通过把这个光照设置高一点的 啊,画面设置高一点 还是比较高,我们通过手机设置吧, 是不是五百二氧化碳不要设置太低,太低的话它一直报警,这个触发的话,我们刚才是通过修改设定值,触发了报警,我们也可以这个吹这个传感器哈气, 这个这个传感器哈气的话,它的二氧化碳值也会变大, 然后这是一个加湿器,当湿度过低的时候会启动加湿,我们把湿度下限设置高一点, 可以看到这个灯亮的时候,这个加湿器开始喷这个水汽,这个棉棒是可以插到水里面的, 现在是我在这个边这个棉棒上沾了点水,所以上面有只有少部分水,如果拿到之后上面没水了,这个可以直接插到水杯里面,通过这个棉棒 啊,可以吸水到这个无法吸收。然后以上就是功能演示,谢观看。

智慧农业智能大棚相关的互联网项目有没有好的参考?这次给大家带来了一个智能栽培养护系统,手机连接单片机的热点 wifi 后,即可通过浏览器实时查看土壤湿度、空气温度、空气湿度、 光照强度等传感器数值。土壤缺水就打开水泵,光照不足就打开植物补光灯,空气温度高就打开通风扇, 空气湿度不足就打开加湿器。支持手动模式和自动模式来控制这些设备,自动模式的预值可浏览器来调节。这套系统是基于局域网模式的, 当然你如果想要做成远程控制的也是可以的。这个互联网项目非常适合用来参加科教比赛、做毕业设计等等详细教程,程序代码、电路设计图, 四万多字的毕业论文已经准备好了,如果你也对智慧农业智能大棚类互联网项目感兴趣,就来加入我们吧!

今天介绍一款单片机设计温室大棚系统,检测周围温湿度、光照强度、二氧化碳浓度、氧气浓度等。 oled 屏显示检测到的环境数据,可以根据环境检测数据自动控制灯光、风扇、水泵及电机等。系统告警预值可以通过按键设置调节, 当超出预值时,蜂鸣期报警。通过手机 a p p 可控制灯光、风扇、水泵和电机等的运行。

我们讲一下这个 g g b 的 一个智能大棚的设计啊,那这个设计的话,你可以用在农业啊,或者种植植物的啊之类的这么一个果园啊,这些都可以。然后他具备 呃空气的温湿度监测,还有土壤温湿度监测,还有光线监测,那根据这些传感器呢,来判断是否需要进行一个呃通风,或者是否进行一个胶水啊?那这个就是我们的 g b 的 一个终端, 这个是这个壁的一个协调器啊,那么在这个中端上面呢,有这个空气温湿度传感器在这里啊,然后这个是土壤温度传感器,是这个黑色的这一条 啊,这可以测土壤温度的。那这边呢?是这条是测土壤湿度的啊,这个可以插在土壤湿土壤里面测湿度啊,那么这里有个光线传感器啊,就这个, 那他是一个光敏电阻。那这边呢有一个驱动板啊,这个驱动板接在这个啊,驱动板接在这边啊,这里呢插着一个水泵, 这个这个驱动板可以那个控制这个水泵的开关啊,那水泵的工作原理是把这个白色的放水里,这白色这个可以放水里,那他工作的时候水会从水管抽出来啊, 这达到一个控制呃浇水的一个功能,那这个呢是一个那个通风的小风扇啊,那么我们在一些条件下呢,会进行一个通风处理啊,那具体的呃有一些控制逻辑,我们写在一个文件里面啊, 比较那个呃科学的一些控制控制逻辑啊,我们可以简单说看一下啊,我们有个分成两个模式,一个自动模式,一个手动模式啊,那么在自动模式下啊,我们可以自动去控制灌盖跟通风啊。 那灌盖条件呢?主要是比如说这个土壤湿度偏偏低的时候,我们就进行一个呃,灌盖啊,那但是如果说这个土壤湿度大于等于最大值之后,我们就会关闭灌盖啊,或者说我们夜间的时候啊,因为我们植物啊, 夜间不太适合浇水,所以在夜间的时候不管他有没有水,我们直接给他关了,不让他进行灌干啊。那是否是夜间呢?可以通过光线传感器来判断,就大概这样子的这么一个控制逻辑,我们在这上面都有写啊, 我们具体就不说了,然后看一下我们的这个,呃协调器,协调器上面呢?呃,写着有一个屏幕啊, 然后供电的话我说一下,供电的话用电脑 usb 啊,就这个线,另另外头接电脑 usb 或者手机充电器都可以啊,不要接充电宝,因为充电宝电流太啊,这这个电流太小,充电宝会以为是手机充满电会自己关机啊, 那我们看一下,嗯,在我们的协调器上面有多了一个蜂鸣器啊,那也有一个报警逻辑的啊,报警逻辑就是比如说 我们空气的温度异常的话会报警啊,湿度异常报警一样写在这个文件里面啊,那么我们先看一下它基本的一个控制啊。 呃,首先显示温度,湿度是指空气的温度湿度,然后这个是土壤湿度啊,写的土湿,土壤温度写的土温啊,这光线值就是 这边这个采集到的啊,比如说你手指给他遮住,他就会变小嘛。啊?那这边呢就可以控制这个自动或者手动啊,你按 s 键可以切换模式的,在手动模式下,你控制通风跟水泵就跟这个传感器没有关系,你想 开就开,想关就关,按 s 键可以进入通风的开或者关,那比如说开的话呢,这个风扇会转起来啊,那再点一下就关, 关了,关了的话呢,他就关了啊,那这个水泵的话,你打开的话会听到一个声音啊,明显听到这个水泵响的声音,再点一下就关了。好,那么在自动模式下啊,我们就根据传感器去控制了啊,那么按 s 键可以进入一直设定,一开设定是温度最小的,按 s 可以 加 三,可以减,继续按 c 键开启温度最大值设定一样可以加减。这个就比如说你种植草莓啊,或者你种植那个菠萝啊,他他希望得到的这些值是不一样的,所以说我们可以自定义啊,就可以满足所有的那个农作物的需求啊, 那么继续按 s 键, s 一 键可以进入湿度的,每项都能加减,我就不多说了啊。接着是土壤湿度,光线值,土壤温度啊,还有我们在最后一页啊,啊,有一个这个 呃时间的显示啊,如果你成功连上云台,会有一个时间显示,如果你还没连上云台,比如我们点一下这个复位键,重启之后我们进入这个界面,我们去看一下啊,他会有一个 wifi 的 一个呃 调试调试的代码啊,像现在显示 wifi 是 表示他正在连接 wifi 啊, psps 是 正在连接服务器啊,那连上之后会获取到一个时间啊,就说明你已经成功连上云平台了啊, 那么,呃我们的那个云平台的那个小程序,我们来看一下啊,我们有个视频叫腾讯,怎么用啊?到时候找我们要视频腾讯怎么用?你就可以连上云平台 实现一个小程序的远程监测控制啊,那么,呃这个,呃小程序啊,不管你是电脑的微信或者手机微信都可以打开啊,这两个模式吗?啊?然后可以控制这个通风的开或者关啊,还有这个水风的开关啊,水风的开关也可以做到水风的开和这个关,然后这边实时 的一个数据啊,也能显示上来啊,那么预知也能通过这边来设定的啊,那么我们还有这个报警状态,如果如果有数据报警了,他就飞,你们啊,报警的时候蜂鸣器会响,那么啊我们试一下,我们来试一下这个 啊,像现在温度就有报警,所以它就蜂鸣器就会响起来,这边有个灯会跟着响,呃,亮起来就声光报警, 那么,呃,因为我刚刚调了这里啊,一直那么我们整体的演示就是这样子,那腾讯怎么样?那个视频有教你怎么做一些消息推送或者定时控制啊,你也可以定时的开启或者关闭手动模式啊,或者定时的通风或者水分开关啊,这些都能做到啊。

我们来看一下这个设计它是如何操作运行的。首先我们先简单介绍一下各个硬件模块,这里是 stm 三二的最小核显系统,这里是 oled 显示屏,这里是 dsa 八 b 二零测温传感器,这里是二氧化碳传感器, 这里是测量土壤湿度的传感器,我们用这个湿纸巾给它包起来。这个是光明电阻光强传感器,这里是锂电池充放电管理模块,这个接口接的是我们这个锂电池,这个接口接的是太阳能充电板。 然后我们这个继电器是控制我们这个水泵的,这个是文压模块,用来给我们这个摄像头远程视频监控模块进行供电的。这两个继电器分别是控制我们这个风扇和这个 led 补光灯。 这里是 esp 八六 wifi 模块,用于连接网络,通过网络连接云平台、禁言和手机 app, 实现远程数据通信。 好在给系统商店以前,我们先开一个 wifi 热点,可以通过手机、电脑或者路由器来开这个热点都可以,因为我们这个 wifi 模块已经配置好商店,它会自动识别并连接这个 wifi 热点, 当然了后期也可以去重新配置 wifi 模块连接你指定的 wifi 名和密码,我们先按照默认的配置去进行使用。 wifi 热点名是大写的 z n 键键,密码是零到九。开好这个 wifi 热点以后,我们就可以给系统商店了, 这边有个按键,单机是开机,双机是关机,我们开机开机以后,我们来看一下这个显示屏,显示 ready 是 等待 wifi 模块联网,这个是自动的,只要你开的这个热点名和密码与我们 wifi 模块配置一致,它会自动连接上, 连接成功以后进入到主界面,我们来看一下,第一行是这个湿度,第二行是光墙,我们现在这个光墙是低于预值,所以说这个 led 灯,这个补光灯是打开的,因为我们这个之前设置的这个预值是两千,第三行是这个温度, 第四行是这个二氧化碳,二氧化碳开机以后它需要初识化的过程,大概一分钟左右以后就可以正常读取数据了,这个是自动的。好,我们来看一下这个安卓手机 app, 打开安卓手机 app, 我 们点击连接, 这个时候它会显示已连接,各个数据都已经上传上来了,我们可以看到。好,我们可以通过这个手机 app 去设置光强域值和这个温度域值,也可以去进行手动控制这个灌盖水量。 好,现在可以看到这个二氧化碳浓度已经上上传上来了,说明那个模块已经初步化好了,然后可以正常采集二氧化碳浓度了。好,比如说我们那个光强,我们可以去设置设置,比如说设置个一千 这个温度的话,我们比如说设置一个二十五,我们来看一下点击设置啊,因为我在这拍摄视频,因为这个手在这边移动,有可能会有这个音响,我们点击设置 好,因为我们现在这个实施的温度是二十七点二摄氏度,是大于我们这个温度浴池的,所以说这个时候它会打开风扇进行降温,可以看到。好, 我们把这个温度浴池给它调高好,这个时候风扇就会自动关闭, 然后这个光强的话,比如说我们用手来按住这个光强传感器,实时的光强低于这个预值,它会打开补光灯, app 这边也会有提醒,这个预值可以自己去设置好,把手拿开以后,这个 补光灯会自动关闭,然后 app 上提醒也会取消。接下来我们来看一下这个灌盖的,灌盖的话是可以在这边去输入这个灌盖的量,比如说我们设置一个 十五,然后点击灌盖好,这个时候可以看到这个水泵会打开,然后 app 这边也会有提醒, 然后我们关盖好之后,可以看到这个关盖的记录,可以看到这个之前是我之前测试的时候有几条记录,然后我们新的记录会覆盖旧的记录,这个可以看到是我们最后一次测试的这个记录,比如我们在测试一个 三十,好,我们点击灌盖,可以看到它会显示打开灌盖,然后我们再看一下记录,可以看到它会就是返回最近五条的记录,然后可以看到新的记录会覆盖旧的记录, 这个就是我们查看怪怪记录的这个功能。最后我们来看一下这个视频监控的,点击视频监控按钮,他会进入到这个视频监控的界面,可以看到他会拍摄出这个视频监控的画面, 然后我们点击退出,它会回到这个数据监控的界面。我们这个系统具有太阳能电池板,可以通过太阳能发电给锂电池进行充电,这样的话它就可以边充电边工作,实现能源自给。 如果只想充电整个系统,不想开机的话,可以把这个开关给它拨到右边来,这样的话它就 实现只充电的这个功能,如果想要开机这个系统给它供电,这样的话就把这个开关拨到左边来就可以了。如果我们当天晚上突然这个测试的时候,整个系统没电了,锂电池电用完了,第二天急等着用的话,因为晚上没有太阳能,我们可以把这个 插头给他拔下来,这个是太阳能充电的这个插头给他拔下来,我们会配送一个这个可以通过充电宝或者手机充电器进行充电的这个线, 把这个头给他插上去,然后另外这一头插到这个手机充电器或者充电宝上,然后也可以给这个系统进行快速的这个充电。

一天介绍一个嵌入式大四项目,今天是低功率 lora 农业大棚,这是我们一款 lora 农业传感器的低功耗设计啊, 嗯,这是我们的 o r e 屏幕,这是我们的 d g t 幺幺传输温湿度,这个是我们的 lora 啊模块, 然后这个是我们的继电器,连接的是我们的水泵,然后这个是蜂鸣器,这个是光敏电阻,用来很传采集光数据。好,这个是它的土壤温温啊湿度的这个采集器,然后我们接收我们的主机方面,然后接我们的主机,我们的主机通过 lowr 来接收重机的这个, 然后秀技,然后来用 e s p 八六六发送到这个上位机上,上位机我们采用的是 q t q t, 然后做一个手机 app, 然后上传到云平台,然后它用 m p t t 传送云平台,我们来对焦一下, 它已经连接了线已经连接了,然后你在上手机上面设计热点,然后去用这个 e s p 八二六六去做它的一个连接,然后现在我们来看一下,我们遮挡一下光照强度, 它,你可以看到这个 oled 下面是会有变化的。十九十八,我们拿开到四十七,那它的这个数据你看 对吧?是不是一个下降,然后又在上升的一过程,对吧?这说明我们的数据已经传上去了。好,我们来介绍一下现在设置的一级的一个功能,然后 这个设置,设置这个土壤,设置这个温度,然后进入这个一直设定的这个模式,然后这是设置啊,这个按一下,这个就是切换它的设置的一个 点,一下,这个就是它的一个一直设置好,你可以设置温度。好,我们现在设置下温度,给它调低一点, 你看调低一点瞬间它就会报警,这个封面就会报警。好,我们再把调高,它又不会报警,这个是我们可以个一个固定的,我这只是为了演示方便,然后给它切换一下,切换到土壤湿度设置预值,你可以看到,哎,我们 贴高一点,然后它的这个水泵就会启动,你看它这个启启动,我们调低, 那样他就不会启动水泵,我们退出,然后他这个这个是会显示的,然后这边也会有有显示,然后这这个低功号怎么进入?我们点一下这个 去进入他的休眠和低功号模式。如果说你想弹重启他的低功号模式,你就要中断啊,打断他的低功号。好,这就是我们的全部功能。

挑战帮一千名同学完成单片机设计。今天是基于 lora 的 农业大棚系统,这是我们一个基于 lora 的 一个智能农业系统。啊。 好,这边是它的主机, lora, 这边是它的从机,然后我先来介绍一下从机的期间啊,这是 led, 这是 s t m 三二七八 t 六的一个主控,这是电机一幺幺的一个温湿度的传感器, 然后这四个四按键,然后,呃,这个是洛尔,然后这个是继电器,连接的是我们的水泵,然后这边呢是我们连接我们的土壤湿度,然后这边是光照的一个强度的传感器。好,我现在来演示一下同级的这个预设怎么设定啊?哈,点第一个, 嗯,可以看到我们进入了这个预设设计界面,然后这边可以减减,然后这个可以加,你看,例如我们设设温度设高一点啊,设低一点吧, 你看我预设设低一点他就会报警,好,报警他就会好,我们设高一点他就不报警了,我们退出来就是按第一个键。好,我们想想知道这个土壤湿度, 按下这个光标,移动光标,第三个按键,移动光标,第一个按进去,嗯,减低,第二个按进去,提高, 我们可以减减,减减,可以看到,因为我本身就没有多少湿度,然后它 它启动的是这个水泵, 我们就我们提个身高, 我再讲一下这个它的,因为它的重机嘛,数据上传到主机,主机上面,我来介绍一下主机,它是一样的 oled, 爱信三系八 t 六一个主控,然后 esp 八二六六的一个网 wifi 模块,然后一个 lora 接收它的重机的信号。 好,我们现在,呃,可以看到还上位机,我先来教学一下上位机怎么使用。 好,我现在来讲一下三维基怎么使用啊?呃,去先设置热点,你的名字改成三个 a, 然后三二密码是三二一六五四九八七,他就会自动连接上,这个就不用管了,他会自动连接上,然后我们打开我发的一个 app, 然后你可以看到,呃,它温度是实时上传的,然后湿度、湿度、温度、光强度和土壤湿度可以看到,你看它,如,如果我把这个手遮到这个光墙上面看它是,它是会有变化的, 只不过有有点慢。长相为鸡,它,它的数据是可以成功上传的。例如我把这个土壤湿度给它捏住,因为我手心有汗嘛,它就会, 他突然说,你看就有变化吧。五十一,他的图像是不是也在变化?这就是我们的一个可识画页面啊。上位机他是通过这个 e s p 三二去呃连接到一个 m p t t 的 一个平台,然后呢再去分发到我们的一个上位机,就是这些。

这是一个四十角的五一单片区,型号是 s t c 八九 c 五二二 c。 真正干活的是中间很小的一块芯片,叫做带 带,与周围引角通过很细的金线连在一起,它还可以长这样,只是换了个外壳,用法是一样的。 这款芯片有三十二个 i o, i o 就是 input output, 即可以作为输入,也可以作为输出。如果接一个 led, 控制 led 的 亮灭,这就是输出。如果接一个按键,按键可以改变这个角的电频,这就是输入 代。可以分这么几个区域,先说 r o m, 它是用来存程序的,你写好的程序最终会以二精致的形式存在这里。然后就是 cpu, 负责读取 r o m 里的程序并执行 cpu 工作的时候会产生一些临时数据, 存放这些临时数据的区域就是 r a m。 ram 比 r o m 小 很多,并且单片机断电后, ram 里的数据就没了, r o m 里的程序断电后是不会丢失的。剩下的这些统称外设,对于新手先了解 i o 就 行了。后边这几个可以先不管。 现在我们尝试让这款单片机干活,四十角是 vcc, 二十角是 gnd, 直接通电后,芯片是不会干活的。想让芯片干活,得让三十一角接高电瓶,然后在十八角和十九角之间接一个晶振,再各接一个电容到地, 最后还需要一个复位电路,具体长这样。现在这个状态就是单片机最小系统就可以正常跑程序了。清除了这些后,就可以动手实操了,你可以 diy 一个最小系统,或者直接买现成的,十块钱左右就能买到。 写程序要用到 q 这个软件,把程序翻译成 hex 文件,再用烧录软件把 hex 文件烧录到单片机里。在烧录前还需要一个下载器,这个也不贵,几块钱,下载器连接电脑与单片机 程序就能烧录进单片机里了。看到这里,相信你已经对单片机有个初步了解了,下期视频教你花样点灯,拜拜。

这节课我们来学习 ds 幺八 b 二零温度传感器啊,其实就是用来这个测温的,那在我们这个开发版上什么位置?在这个位置啊?这有个 ds 幺八 b 二零, 那它其实呢是由一个公司,一个半导体公司,我写一下 d a l l a s, 这是它的一个公司的名字,我也不知道是哪公司,为了讲课我只把它记住了啊,是由一个这这样一个半导体公司推出的一个温度传感器,其实呢在接入式系统中,它是我们 经常使用的温度检测器件。大家来思考一下,传统啊,我们是如何测温的?是不是通过热敏电阻啊?温度变化,电阻组织变化,于是呢电路会做出响应,电压和电流发生变化,那么反过来我们就可以利用这个性质来测温, 但是呢问题就在于它不直接啊,不直观。而对于我们这个产品来说, d d s u 八 b 二零,它能,它是具备数字化输出,我们一给他解析就能直接拿到这个温度的数据, 并且呢接口简单,你看这个接口一共是几个?一共三个啊,有电源要接地,那其实他用来通信的其实就是中间这一个啊,中间这一个,你说他要和我们这个单片机通信,就是通过中间这一根啊,一根线,哎,我们有单独的一根线,跟某一个引角连起来,于是就能完成通信啊, 它们之间的通信呢是 one wire 单总线。我们之后给大家说啊,之后给大家说,而且呢它的抗干扰能力相对来说也比较强,应用范围呢,那就太广了,比如说这个环境监测,哎,比如说我们这个室内外 这个温度检测系统,是吧?还有我们这个常见的什么温室大棚温度控制以及工业设备啊,可能会有一些过热保护,温度不能过高,达到某一个预值,我立马要让他断电,否则的话我这个设备可能就烧坏了,是吧?还有这个工业现场的多点温度采集,哎,你比如说我们这个煤矿井下啊,煤矿井下, 哎,各种各样的传感器里面其实就有温度啊,就有温度,还有什么智能家居,对吧?哎,我们这个家电的这个温度检测控制,还有这个智能温控设备,哎,温度过高了,空调打开温度过低了,哎,空调也要打开, 是吧?还有什么最直观来说啊,在我们这个单片机的课程设计啊,或者说毕业设计里面可能也会经常用到这样一个,呃,这样一个温度传感器啊, 好,那么它的核心功能或者说这个优势呢?首先第一个啊,宽电压适配,就是说它的工作这个电压范围是比较宽的,是三到五点五伏, 是不是这样一个范围,其实可以适配绝大多数接入式系统的这个电源设计啊,同时呢,它还支持一个叫继升供电模式啊,继升供电模式 就说白了,可以通过这个通信的数据线来获取工作电源啊,来获取工作电源,因为我们说了它最终呢是要通过呃,一中间一根线进行通信的啊,这根线其实呢我们是要接上拉电阻的啊,接上拉电阻,并且呢接到这个电源上,所以说它有一种这个寄生供电模式,大家了解一下。行了啊, 那么它通信方式呢?是单组线协议啊,单组线我们前面讲过串口,讲过 iphone 啊,那么这个地方呢,我们讲这个单组线,大家不要怕啊,它不难。 另外呢,他这个温度的测温的范围呢?哎,比较比较宽啊,一般来说在零下负五十五摄氏度到零上一百二十五摄氏度之间,所以说这个哎,范围呢,还是比较宽的,对吧?而且呢这个精度呢,也比较高,在这个负十摄氏度 到八十五摄氏度区间的范围内啊,只要你的测温范围在这个范围里面,那么它的精度呢,可达到正负零点五摄氏度,这就是误差啊,误差在正负零点五摄氏度之内,哎,为什么我记得这么熟,就是为了讲课,我记住它了,我可能今天讲完了,明天就忘了,所以说这个地方大家也不需要记啊,大家也不需要记。 好,那么我们来看一下它这个封装啊,这个封装很简单,它其实就有三个引脚,一个是 gnd, 一个是 dq, 一个 vdd。 那 这个 gnd 呢,其实就是接地,对吧? vdd 呢是接电源,那 dq 呢,它其实呢是和我们单片机啊,一个云脚连起来, 对吧?一个云脚连起来,那么于是呢,我们就可以通过这个 dq 来进行单面机和 ds 幺八 b 二零之间的通信了啊,所以说这个 dq 它是数据输入和输出啊,负责这样一个功能。 另外呢,我们刚才说了,他其实还有一种寄生模式啊,在寄生供电模式下,那你这个电源正极呢,其实是可以悬空的啊,不管,那我可以通过这个 d q 啊,这个数据线 来进行供电啊,因为这个数据线其实也是要接上拉电阻的啊,也是要接上拉上拉电阻,不出意外的话,他的连接啊,也是开漏的啊,也是这个他的输出呢,也是开漏输出,所以说我们这根线呢,其实呢 是要接上拉电阻的,是可以通过 d q 来进行供电,这是一种寄生供电模式。 左边呢是大家这个开发版上啊,它的这个设计,中间这个 d q 或者是这个 i o 呢,它是和哪一个引脚连起来?是和我们这个 p 三七啊连起来的,换句话来说,后面我们要实现单面机和我当前的这样一个模块通信,其实就通过的是 p 三七这个引脚啊,和这个 d q 连起来。 好,那么我们现在来看一下这个 ds 幺八 b 二零它的内部组成啊,这个图看起来很复杂啊,其实呢不需要大家都掌握,我们了解一些内容就行了。首先这个 dq 我 们说了,其实就是输入输出引脚,就是通过它来进行通信的,对吧?它是单主线,我们后面会讲这个单主线协议啊,这种通信的这个核心引脚, 哎,这个通信的时候是双向的,数据可以出去也可以进来啊,可以可读写。另外呢这个引脚它还有一个作用啊,就是说是一个寄生供电功能,当我们 v d d 没有的时候,哎,这个我们可以通过这个 d q 啊,你看这是其实是有个上拉电阻的啊,这有个电源电源啊,上拉电阻,那这个上拉电阻呢,大小一般来说就是四点七千五,保证总线的这个电瓶稳定啊,我们后面再给大家说。 总而言之呢,这个 dq 呢,是我们这 mcu 或者单片机与 d s 幺八 b 二零通信的唯一通道啊,没有了,就是这一个通道, 那中间这个地方呢,是一个电源电路,可以看出来,在这个电源电路里,虽然你看不懂,但是你知道哎,有一个 vdd 连过来了,有个 dq 连过来了,这说明什么?它有两种供电模式,一种呢是外供电啊,我们就是通过直接一个电源给它提供啊,给它一个引角供电。另外呢, 第二种方式呢,就我们说的是个寄生供电,可以通过这个数据线获取工作电流,所以说对于我们当前这个 d s u r b 二零来说,它是非常适配这个低功耗或者是空间受限的场景,我们可以直接利用这个数据线来给它。哎,供电啊,一种寄寄生供电的方式,这里大家了解一下就行了, 具体原理有有些东西我也不会啊,有些东西我确实也不会,大家了解一下就行了。 好,那中间这个模块大家来看是六十四位 room 与单总线,就是 one where, 就是 单总线口。大家想啊,我通过这个 d q 这个数据传进来啊,拿,拿到这个数据之后,其实主要是和右边这些东西来进行通信,对吧?你可能不知道右边是什么,但是你没关系 啊,总而言之,这个数据进来之后,是不是要和我是不是要中间相当有个门啊?有一个这个 one where port, 这是它的一个一个功能, 另一个呢是六十四位 room。 六十四位 room 什么意思?就是每一个 d s u y b 二零它都自带唯一的一个 room 地址啊,就是每一个这个设备都有一个地址,这个地址呢,它是六十四位的, 六十四位的,那么这个单主线其实就是一根线啊,后面我们会说这个 d q 嘛,其实就是连着一根线,这个线上其实可以是有多个传感器的,每个传感器它们都有自己这个唯一的地址啊,所以说我们可以通过这个地址来区分同一总线上的多个 传感器啊,实现这个多节点的测温啊,多节点的测温,其实呢有一个更专业的术语叫支持单组线多点组网啊,多点组网,你看我有多个这个测测温的设备,在多个位置,每一个位置它都它的这个它的这个地址呢,都是唯一的啊,叫多点组网。 好,随后我们接着往后看,这个地方呢有个 scratch pad, 这个 scratch pad 你 可以理解为一个暂存器啊,一个暂存器,我来写一下, 就是用来存储数据的呗。好,那么右边的来看,首先呢有个温度传感器,那很简单,你这个温度传感器获取温度之后,我肯定要放在这个暂存室里给它存下来,对吧?所以说是一个数据交互的临时存储区啊,也是我们后续编程的核心操作对象 啊。那么还有什么呢啊?它里面还有哪些东西呢?大家来想啊,我们这个温度是不是有的时候我们需要一个高温的一个预制,或者是低温的预制,温度高于这个,哎,温度或者是低于这个温度,你看是不是要有一些特殊的一些响应,对吧?所以说我们在这里给我们一些配置,叫 这个高温的时候触发啊,以及低过温度过低的时候触发等等啊,还有一些其他的这个呃配置信息,当然还有一个叫八位的 crc 啊,这个叫验码,如果大家学过这个计算机的话,你应该对它不陌生啊,它的作用呢就是保证数据的可靠,数据传输的可信。这里呢我们不做过多的讲解啊,不做过多的讲解, 总而言之呢啊,我们这个暂存器里面就放三种东西啊,一个呢是这个温度传感器转换完的这个温度数据,第二个呢就是一些高低温报警预值,这个配置对吧?啊?配置配置信息,还有呢就是呃, crc 救援码啊,我们重点呢其实是在这啊,在这下面这些呢我们不考虑, 那再往上呢啊,往上面是一个存储控制逻辑,那么大家想啊,它起到一个什么作用?肯定是协调,对吧?它协调谁啊?温度传感器,暂存器,还有谁啊? 还有这个,还有这个数据交互,对吧?数据交互,你这个数据 a 从这来了之后,到我这个 v v r 破了之后啊,我要读,最终肯定是要从这个暂存器里读,那中间它呢其实就是一个控制模块啊,控制模块控制我们这个呃,数据的读写与转换流程。 好,因此呢,整个图在后面,我们重点在什么地方?首先在这儿,对吧?这肯定不用说了,这是非常重要的,关于这个单组线啊协议呢,我们后面还会讲还有什么地方, 还有这儿啊,以及这个地方是不是我们这个温度传感器,它其实呢就是一个核心的单元,最核心的单元负责将我们这个环境温度转化为数字信号,是不是?然后呢?哎,存入到我们这个暂存器,等待,哎,等待读取。 好,那么在这个地方呢,我们可以简要的给大家说一下它的核心工作流程啊,比如说我们这有单面机啊,一个引角呢,和这个哎 dq 连起来了,对吧?哎,单个线嘛, 那么在这个过程中,首先呢是,哎,首先呢是我这个单面机,它要发送测温指令啊,发送这个测温指令,哎,于是,于是我这个,呃,于是我这个 ds 幺八 b 二零接触到指令之后就开始测温,测完温度之后啊, 测完温度之后呢?哎,他会把这个环境温度转化为数字信号,放到我们这个暂存器中,等待我们 mcu 读取,那随后呢, mcu 要接着发送一个指令,什么指令?就是我要读取你这个 呃,温度温度了,对吧?你每一次,每一次一,每次通信的时候,我们要发指令,到底要干嘛?到底是让你测温呢?还是要读取我这个数据,哎,一旦我这个读取要读取这个数据,哎,我就顺着这个 dq 到我们这个单面机里了,是不是啊?单面机随后还有解析数据,得到我们这个实际的温度值。 好,那么接下来我们就来看一下 one wire 单总线通信啊,这个协议呢,它是一种单工的串行通信协议,那么这个串行大家应该理解,就是一位一位的,是串行,肯定就不是并行啊,那这个半双工什么呢?就是我可以给你发,你也可以给我发数据,但是我们不能同时发,因为是半双工,只有一根线啊,只有一根线,我给你发的时候你就不能发了, 它不是一个,呃,全双工啊,是半双工,这点大家一定要注意。 那么这个协议呢,它主打的是一个极简啊,极简只有一个总线,是不是只有这一根线?那主要呢是与这个一些低成本的传感器之间进行数据交互时采用。 这个采用的架构呢,和我们之前讲过的啊,跟我们之前讲过的 iphone c 其实很类似,它也是一个主从架构,一个主设备啊,可以连接多个从设备,并且呢通过单根数据线啊,这是个 d q, 这也是个 d q, 单根数据线完成双向通信啊,并且呢对于我们当前讲的这个 d s 幺八 b 二零来说,可以通过这个 d q 啊,可以通过这个 d q 来获取这个来进行这个寄生啊,一种寄生的这个供电模式,是不是啊?功能,这个这根线的功能还是比较多的,主要呢还是进行通信 好。那么这个所有的连接的这个设备呢,其实还是开路模式啊,一说开路模式,一个引脚,我们说了它其实呢包含两部分,一个是呃 p mos 管啊,一个是 n mos 管,我们之前都给大家说过了啊,那一如果是开路模式上面这个你就不要管了,你就直接把它视为断开啊,就始终是断的。那么这个 n mos 哎,有的时候呢,我们可以直接让他接地,对吧?一旦接地的话,我这根线是不是就直接电位全部变成零伏了,对吧?电位这个导线上任意一点电位应该是一样的,一立马就变成零伏了,那我其他同设备想要拉根这个拉高这根线,可能吗?不可能啊,不可能。所以说, 哎,你比如说我这个主设备啊,主设备要释放这个总线,怎么做呢?哎,以高阻太的形式啊,高阻太的形式一旦断开,没有电流流入,没有电流流出,那么由于这个上拉电阻的作用,就会使得我们这根线,哎,始终处于一个 哎高电瓶的状态啊。通信,这个通信结束处于一个空闲状态的时候,它就是一个高电瓶,那么这个时候我这些从设备就可以驱动我当前这根线来,比如说把它拉低,把它拉低就可以了。那还是一样的,从设备使用完了之后,其实呢也是一样的啊,要释放这根这根线怎么做呢?哎,就是,其实就是高阻碳,对吧?高阻碳 把它拉高就行了。好,那总而言之呢,只要我们有一个设备啊,把我这根线拉低 啊,把我这根线拉低,那么任意一个从设备他其实都是可以感知的,所以说是一种广播式通信。哎,就像,就像我们这个电视一样,对不对?大家要看中央六台,你,你的和我的电视上应该是一模一样的,都是通,都是哎,一块传过来的,对吧? 啊?一块传过来的,一根线上,这是我家的电视,这是你家的电视,一根线传传来的,只要你看,我们应该都是一样的啊,一种广播式的通信。 好,那么这个地方还有一句话,不知道大家能不能理解设备的输出只能主动拉低总线啊?因为是开漏的,所以说我这个引脚其实就是两种情况,第一种情况给它接地,那就是主动拉低我这根总线,对吧? 这个导向任意两点是等电位的参高点,就是零伏。那第二种方式呢?就是第二种形式,就是高阻态,相当于我有一个非常大的电阻啊,没有电流流入,也没有电流流出,那么这个时候,哎,那么这个时候 大家来想啊,这个这根线上的此时肯定是高电瓶,对吧?高电瓶是谁?由谁来决定,是不是我这个上拉电阻,还有我上面这个电源啊,所以说我们这些所有的设备的输出呢,只能主动拉低总线,而无法 这个主动驱动总线为高电瓶。就是这样一个形式,就是因为我们这个引角现在是开路模式,要不然接地,要不然高阻碳啊,要不然高阻碳,所以说他可以主动拉低总线,但是呢,没办法主动驱动总线为高电瓶,真正意义上的这个高电瓶其实是由这一部分啊,这一部分来实现的, 所以说上拉电阻是必须要有的,通常啊,这个上拉电阻的阻值呢是四点七千欧啊,四点七千欧,我们往上翻,往上翻, 哎哎,我们往上翻,在这个地方,你看之前我这是不是画了一个上来电读,为什么大家应该就知道了,归根结底呢,就是一个开路啊,是一个开路模式。 好,之前我们说了,对于我们当前这个 ds 幺八 b 二零,它其实呢里面是有一个六六十四位的地址啊,为什么是六十四位呢?这其实就是 one wire 协议的要求,任意一个啊,任意一个 one wire 从设备出厂时都应该被烧入一个唯一的六十四位地址,而且不可更改,他的这个结构呢,通常是,哎,八位,最开始呢有八位的家族码啊,八位的这个家族码, 比如说我们当年这个 ds 幺八 b 二零这个家族码为他,对吧?那其他的那家族码就别的一个大家庭吗?我们是一个大家庭,肯定是有一个,呃,就是一个家族码,就相当于是我们这一大家庭里面每个人又有不同的名,所以说是,哎,每一个这个 ds u 八 b 二零,它都有一个四十八位唯一序号啊,每个设备独有的 id。 那 么再往下呢,还有后面还有一个八位的 crc 校验码啊,用于验证地址的有效期。其实呢,它其实采用的是一种算法啊,前面不是有八位吗?有四十八位吗?啊,那么 那么在发送的时候啊,在发送的时候,其实我可以根据这个算法来通过前面这五十六位算出, 我就说是某个算法,至于什么算法,这个地方大家不要管。哎,算出一个序列,那么这个序列和我这个提供的 crc 序列可以进行比较。哎,如果说我用这个同样的算法算出来了,这个结果和你给我提供的这个 crc 校验码是一样的,说明传输的没有问题啊, 一般来说,你前面八位定了,哎,前面八位和前面这个四十八位定了,那你后面这个 crc 采用这个算法算出来的时候,这个值就是固定的啊,所以说最后最终这个八位也是固定的啊,也是固定,就是因为你前面这个五十六位是固定的,所以说你这八位是根据这五十六位算出来的,它也应该是固定的, 接下来我们就来学习下这个语句啊,看图说话,写对应的代码, 对吧?我们站的角度呢,一定是主设备的角度来写代码,对吧?我们要给我们单面机里面写代码,而不是说给其他这些从设备写代码,这些从设备里面他们是,哎,在出场的时候其实就有对应的这个这个程序了啊,我们不需要管他,我只需要 啊,我只需要管我这个主设备啊,主设备。所以说我们看这个时域图一定是站在单面机的角度来说的。 首先每次通信,大家现在先在脑子里要记住每次通信啊,你,我再强调一遍,每次通信,每次通信,每次通信,你把它这记住,每次通信我们必须完成初步化,这个初步化呢是包含两步啊,包含两步,那么第一步呢,是主设备 发送一个复位信号,从设备呢回复一个,哎,存在就相当于主位说,主设备说,你在吗?要干活了,然后从设备回复你说,哎,我在,哎,我,我准备好了,就是这样一个事。好,我们来看一下,首先看第一个主设备发送这个复位信号,或者说复位脉冲, 它的核心思想呢,就是把这个总线啊, d q 这个总线拉低一段时间,然后呢?哎,由于是这两个设备直接连着嘛,对吧?通过这个线连着,所以说一一边把这个线拉低了,另一边是直接能感受到这个电瓶的变化的, 那一旦感受到这个有一个长时间的低电瓶,那么它这个从设备就知道了。哎,我现在要复位,要准备通信了,要准备干活了, 好,那么呃,我们要再给大家强调一个东西,对于五一单片机来说,它其实性能是比较差的啊,为什么呢?大家想,对于我一行代码,其实我写了一行,那么翻译之后呢,它其实对应了很多指令,对吧?很多指令。那对于我们这个五一单片机来说,一个指令 它的这个时间呢?大概是一到四个机器周期啊,一到四个机器周期,那么这个机器周期呢?对于我们这个十一点零五角照赫兹的这个精度来说,哎,应该是一点零八微秒, 对吧?也就是执行一个指令呢,大概呢就是一维秒左右啊,一维秒左右,你就记住一维秒就行了。十二兆赫兹的时候是一维秒啊,一维秒到四维秒,对吧?执行一个指令。好,大家记住这这个就行了啊,这个很重要。 那好,我们看图说话,这个主设备发送这个复位信号什么意思呢?其实就是让它,哎,这个主设备主动把这个 d q 这根线拉低,对应我这个代码啊,这个,这个是谁啊?这个什么 d s u 八 b 二零 port, 它是一个别名,谁的别名啊?我们往前翻啊,往前翻是这个 p 三七的别名啊,是 p 三七的别名。 好,那首先呢,把这根线拉低,拉低多久呢?这儿说了是至少是四百八十微秒啊,至少是四百八十微秒,那我在这儿来一个七百五十微秒,可以吗?可以啊,人家说了只是说是一个最低标准, 那么这个复位麦脉冲就是相当长一段时间的低电瓶啊,相当长一段时间的低电瓶。 好,那我拉低之后啊,大家来想啊,最终我这个从设备是要回复我主设备的,对吧?我主设备 一定要把这根线给释放掉,所以说肯定这是有一段要释放这个这个弧线的,就代表的释放啊,这个 时间呢,其实非常短的啊,时间是非常短的,可能一微秒甚至都不到就结束了,但是这样大家来看啊,就是我从这个低电瓶到高电瓶之间呢,这也说明了其实是可以等十五到六十微秒的啊,十五就是十五到六十微秒,那大家看我给他拉低啊,从这个 低电位拉高到这个拉变成这个高电位,其实就是一微秒,那然后呢,我再让他,哎,等二十微秒就行了啊,等二十微秒,其实就是十五到六十微秒之间都行,这个呢还是比较宽泛的啊,于是呢我们就来一个二十微秒,其实上面这些指令在执行的时候,他都会占用时间啊,都会占用时间。 好,那么到此为止呢,主设备发送复位脉冲或者是复位信号的工作我们就做完了,只要我主设备把它拉低,并且呢长时间拉低,拉低至少四百八十微秒,我这个从从设备是可以感受到的,就相当于什么相当于是咱俩手拉手,我手 长时间的捏了你一下,你就知道哦,我该,我本来是在睡觉,对吧?我没事干的时候就睡觉,因为我是一个低功耗的产品,没事干的时候就睡觉,然后我的手一直拉着你,然后我使劲捏你,持续一段时间,然后我放开,你就知道 啊,不能再睡觉了,接下来要工作了,但是呢,我还得告诉主设备我醒了,我在我能,接下来我能正常工作,所以说于是有一个从设备回复存在信号啊,我们来看下这个从从设备是如何回复的 好,那么具体怎么做呢?其实可以看出来,我们这个从机啊,这个灰色的线从机把我们这根线拉低,拉低,至少啊六十微秒,六六十到二百四十微秒,大家来想,这是我从机的程序来负责的事,关我主机什么事?没关系啊,没关系,就说这个协议要求我这个从设备, 哎接受的,接受到这个废复位信号之后,我要主动的把这个哎,把这个 dq 啊拉低,拉低呢是在这样一个范围里,那比如说二百微秒,这是我从设备的程序实现,对于我主设备来说,他不关我的事啊, 我只需要在这读就行了,只要我在二百微秒之内能够读到零,说明我这个从设备他活过来了啊,他醒过来了,他能够正常工作了。然后呢,哎,我只要读到零之后,我又读到一了啊,又在后面读到一了, 哎,就说明我们当前这个这个周期就结束了,是不是?哎,首先呢是一个负一脉冲,然后一个存在脉冲,这是对我主设备来说的,但是对我从设备来说啊, 他的事就比较多了,首先呢他要这个低信号啊,这个低电瓶,这个信号呢是在六十到二百四十微秒,随后呢还要再拉高,拉高啊,高拉高之后也要维持一段时间,要保证这段时间是至少四百八十微秒的, 这是对我们从设备来说,也就是我从设备里面其实也是有程序来实现这个过程的,他关我主设备什么事?不管我主设备是什么事,我主设备只要能够,哎,在这样释放之后,在二百微秒啊,比如说我们就选二百微秒,在二百微秒之内,哎,我们读到这个 低电屏啊,读到这个一个低电屏,随后呢,哎,又又在二百微秒之内啊,二百微秒之内, 对吧?差不多嘛,因为你后面我们要写代码,代码他也要,呃,执行的时候代码他也要消耗时间的, 加起来差不多,包括这个地方我们刚才又留了二十微秒,是吧?加起来肯定是够这个,呃,四百八了啊,肯定四个四百八。总而言之就是我在二秒秒,二百微秒之内我得到一个低电屏,然后呢?哎,我又过二百微秒得到读到一个, 哎,又又在这个二百微秒之内读到一个高铁位就行了啊,就行了,这是我主设备,它就是读,至于这儿拉高多少,至于这这个地方至少多少,这是我从设备的事,不管我主设备的事,我主设备只负责这个至少四百八十微秒啊后,后面这个至少四百八十微秒,不关我的事。 好,那么接下来我们就来看一下这个存在脉冲啊,存在信号,其实呢,它就有点巧妙了啊,我们来看一下,大家来讲,对我主设备来说什么时候就代表成功了?也就说我在这个二百四十微秒,比如说我就选二百微秒啊,在二百微秒之内读,我只要读到零就说明成功了, 对吧?然后我在后面等这个高电瓶就行了。那如果说我在二百微秒之内,我没读到零,我始始终就是始终是个高电瓶,说明什么?说明读取失败了,对吧?我这个主设备给问我这个从设备你在吗?然后这个从设备不,不应答,因为我读了二百微秒都没读到这个低电瓶,是不是?所以说大家来看啊,在这个地方 最开始的时候呢,由于这儿已经拉高了,所以说这儿是一,这个条件是满足的,那后面这个条件,这是一个 time, time time, 它最开始的时候零,对吧?零。那么大家来想啊,我这个 while 循环, 如果说我这个 d s d s 幺八 b 二零 pad 始终是一的话,就是这始终是高高电瓶,那我这个就会一直循环下去,对吧?每次循环我这个变量加一,每次循环变量加一,那一最多循环多少次?循环二十次,对吧?啊?循环二十二十次,每次循环大家来看是十微秒, 那循环二十次刚好就是二百微秒,相当于什么?如果说我这个 while 真的 循环完一遍了啊,就说明我这个,呃,这儿啊,始终都是高电频,我读了二百微秒,你一直都是高电频,对不对?就意味着通信要失败了。 那如果说这个 while 一 旦循环结束了,我这个临时的这个变量应该是多少?应该是等于二十,对吧?因为它是从零开始,不断加一,不断加一,不断加一,那必然是有一次它会等于二十,等于二十的时候不小于二十终止了。所以说我们这个变量只要检测到它是大于等于二十的,说明我上面直行了一轮啊,直行了一轮, 就就意味着这个电瓶始终是高电瓶,并且呢,哎,读了两百微秒,始终都是高高电瓶,所以说这个时候我们 return 一 啊, return 一 表示的是超时了,这次呢通信失败了,因为这个从设备没有硬达,我们直接返回一啊,返回一,那如果说从设备硬达了一个正常的情况,我们最终返回的是零, 好,那这一段是比较巧妙的,大家一定要搞清楚他是怎么回事啊?就是说白了,我我读二百微秒,这二百微秒之内只要有一下啊,只要有一次这个地方变成零了,那这个条件不满足,不满足直接就会终止啊,直接这个循环就会终止,并且我们这个变量他肯定也不是 等于二十,不,不可能大于等于二十啊,因为他没执行完,那随后呢,就会进入到下面,下面的时候我们又有记时了,又有记时,我们再把这个变量,你可以说明一个 i 一个 g, 但是多多一个变量,不是多一份内存吗?是不是?所以说我们就附用这样一个计时的这样一个变量,我们让它置零,好,那么接下面接着来。 好,那么大家来想啊,那对于我当前这个通信还没有结束,只是说这一段啊,这一段我们成功读取到了,才会执行到这个地方,对吧?那后面还有一部分要变成高电平, 那么此时大家来想,我这个 ds 幺八 b 二零 pos 应该是零,对吧?此时应该是零,所以说,哎,大家来看啊,如果是非零的话,这个就是一, 那如果说我这这个,我这个地方啊,这个地方他拉低了之后,始终在拉低,没有按照我们约定拉高,那始终是零,那于是这个地方就会循环啊,循环一和上面是如出一辙,对不对?循环二十次,那么最终呢?这相当于是延时了二百微秒, 意味着什么呢?如果说我这个 while 循环完啊,一整个循环一遍,没有中中途的这个退出,一整个循环一遍,就意味着我这在这个地方读了二百微秒,然后呢?你始终都是低电频,因为你是低频,然后我取反,不就是,不就是一吗?这个条件是满足,满足我才会进入这个 while 循环,那么这就这就是不按约定办事。 如果说不按约定办事,你这个 while 循环完一遍,你这个 time time, 它应该是等于二十的,对吧?在某一次循环,它必然是等于二十,然后二十不小于二十,终止循环,所以说我们最终返回的是一啊。按道理来说,你这个读二百秒,你肯定要读到高电频的啊,肯定要读到这个高电频的 好,那么这个地方我们就直接 return 一 啊,因为有异常了,有异常呢,就终止交易,对吧?有内轨终止交易。那如果说,哎,上面这些 你,你通过了层层的关卡啊,层层的关卡,那么你没有读,没有,这个循环没有结束之前啊,你这个地方它就已经变成高电频了,一旦这个地方是高电频,那取返就是零零的话,前面这个条件不满足,那一整个条件就不满足了,于是 will 退出啊, will 退出,那这个 will 没有执行完的话,这个 time time 就 不可能大于等于二十, 这行也不会执行,那最终呢?就返回的是零,代表的是我们当前第一次这个抽象成功了啊,抽象成功了两个,两个步骤, 其实在这里呢还有一个小细节啊,就说这一段哎,拉低,然后再什么拉高,然后总的呢是四百八,至少四百八十微秒,这是我们从基的要求,也就是说从基它里面也是有自己的程序的哎,我拉低至少六十到二百四十微秒,然后拉高,那对我主机来说,这不关我的事,我,我只要在这个读啊,我只要在二百 哎微秒之内读到就行了,你看是不是在二百微秒之内读到哎,然后在二百,然后又又又得到读到一个高电频就行了啊,而不是说我要让他读二百微秒,不是,这个不是这么回事啊,这个拉低二百微秒是对我们这个 从设备来说,他应该主动去拉低二百四十六秒,但是对于我主设备来说,我只要在这个时间内读到了这个低电频就行了。 好,于是呢,我们就可以把这两个步骤放在一起,首先呢啊,就是这个通俗化,对吧?每次我们要进行通信的时候要进行通俗化,我们前面让大家记了一个东西叫每次通信啊,所以说每次通信你都要 哎,都要进行触触化。那么触触化两个,首先呢是主设备向从设备哎发送信号,这个信号呢是一个复位信号,就告诉从设备你不要睡了,你是个低功耗产品,没事你就睡觉,我知道你,所以说我现在让你,我要唤醒你,你要开始工作了,然后我这个从设备呢哎,收到这个复位信号之后呢,产生一个应答的一个信号,如果说,哎, 如果说我主设备成功的读取到了这个低电频,这个高电频,那么最终返回的是零啊,所以说大家注意一下我们这个输出,输出函数最终如果返回的是零的话,哎,说明这两个步骤都完成了啊,这两个步骤都完成了,如果说最终这个函数返回的是一的话啊,返回的是一的话,那么,哎,当前的这个输出化就没有成功 好。那么下一个操作呢,是对于我们主机啊,要向我们这个从设备发送数据,比如说发送零啊,发送一,我们来看一下发送零是怎么发,首先呢主机啊,我们这个单片机要拉低, 拉低之后呢,哎,就持续拉低,至少要在一百六十微秒到一百二十微秒啊,我们就以六十秒,六十微秒为例啊,六十微秒为例, 那么首先在拉低的前十五微秒是没有任何动作的,那在第十五秒的时候,我们这个从设备 ds 幺八 b 二零,他就开始踩样了啊,他就开始踩样,在第十五秒是在以及到第六十秒啊之间他会进行踩样,踩到是谁啊?踩到是零啊,就知道我们这个主设备 向我们从设备向我当前这个 ds 幺八 b 二零发送了一个零啊,发送了一个零,哎,然后呢释放啊,这个释放呢,是 这个主机要释放,对吧?哎,变成一个高电频,那么这个这个过程啊,可以是至少应该是一维秒,当然你是个非常大也可以,对吧?一维秒到无穷大嘛,就是非常大也可以, 哎,总而言就是释放之后呢,我让他等一维秒,然后呢再发送下一个数据啊,如果下一个数据还是零的话,那就是接着这个拉低,如果说下一个数据你要发一的话,于是我们就来看后面这样一个过程。 好,如果有人要发一的话,那么我这个主设备首先拉低啊,拉低之后我要再变成再拉高,那么这个拉低之间应该是一微秒啊,然后呢我再拉高,拉高。大家来想啊,我从拉高到拉拉低到拉高这个过程 啊,这样一整个过程,你是不能啊,不能超过十五秒的,因为我十五秒之后就开始踩样了,对吧?如果说十五秒之后你还是个低电瓶,那可能踩到就是零了,所以说在十五秒之内,我应该完成这样一个动作,首先拉低一百秒,哎,然后呢我给它释放,释放成高电瓶, 那之后呢我就开始踩样啊,高电瓶了,那我这个 ds 八 v 二零才样才样,才样得到一啊,才样得到一,就知道我这个主设备像我这个从设备发送了一个一, 好,下面我们来看一下代码,一般发送我们都是发送一个字节,对吧?发送一个字节,比如说我要把,我要把这个,我要把一个字节复制给我这个 date, 它其实就是八位,那么对于我们当前这个单主线来说,它要求的是低位弦传啊,低位弦传,所以说我们要来一个 for 循环,每次拿出一位,那拿出哪一位呢?和这个零零零零零啊,四个零, 三个零,一个一进行逻辑语语,逻辑语完其实就是把前面这七位哎给去掉了,去掉之后我只把这个最低位拿出来,这个最低位是零,是一,哎,通过这样一语我就知道了,我放在这个 time, 如果 time 是 零的话,就执行我们刚才发零的那个逻辑。如果是一的话啊, time 是 一的话,我们就执行发一的, 哎,如果是,如果是一在这是吧?如果是一的话,我们执行发一的这个逻辑,如果说是零的话,我们执行,哎,发零的这样一个逻辑,那么到下次循环的时候啊,下次循环,尤其在上次循环,我们把这个, 哎 d a t 往右起了,往右移了,起,往右移了一位,对吧?就相当于什么?相当于我这个最低位,已经发了,发了我就把它给踢掉,往右移嘛,整体往右移啊,比如说我要发的是幺幺幺幺 啊,幺幺幺幺这样一个,这样一,这样一个自己,那首先第一个呢?我就把一发出去,发出去之后,然后这样又移一位啊,又移一位,然后我把这个又移之后的结果再复制给这个 d a t, 那 么此时 d a t 是 谁?右边这个就踢掉, 哎,然后呢?我左边给他要加,因为你要凑够八个八位吗?你往右移了一位,最右边一没了,那最左边来个零, 那么这个时候大家来想下次循环的时候最低位是谁了?哎,又和这个零一进行语,是不是就是把这位拿出来了?那这位拿出来之后,哎,我们接下来就可以把这位发出去了,对吧?一就是一的逻辑,零就是零的逻辑。 然后呢,在这个地方,哎,我又把他最右边这个给踢了,踢了之后呢,我在左边补个零,对吧?是往右移吗?啊?不够的,我要补零,那最最后呢次高位啊,次次低位始终就变成一个最低位,那我下次直接发他就行了,是不是啊?这个流程大家一定要搞清楚, 那么我们还还是来看一下下面这个逻辑啊,比如说现在这个地方是一啊,我们要写一了,那怎么做呢啊?我们来看一下, 如果要写一的话,首先第一步要拉低,对吧?哎,拉低之后呢?一每秒啊,下面呢,大家来看这个 n o p 这样一个函数啊,这样一个函数,它其实呢是一个空操作,就是 什么都不干啊,什么都不干,这样一个指令指的他他要占占一个什么一个记忆周期啊, 虽然他什么都不干,对吧?但是他是个指令,指令的话其实就是一到四个记忆周期,但是这个指令比较简单,他就占一个记忆周期,比如说我这一行就是在一微秒这样一个时间里啊, 应该是近似于微秒,因为我们这个金震呢,大概呢?是这个,因为我们这个金震呢,是十一点零五九二的啊,一个记忆周期应该是一点零八五微秒 啊,我们就近次就是一维秒吧,就是说在近次这个一维秒的时间里,什么都不干啊,什么都不干。那么如果说要使用这样一个函数,一定要包含它的这个头文件,这个头文件是什么呢?我来给大家写一下。 include 啊,这是一个预处理指令,要包含什么头文件? 兼顾号是什么意思,大家应该知道。和双引号什么意思,大家应该知道啊,应该知道,我这里就不说了。一般我们自己写的头文件是什么意思,大家应该知道,我这里就不说了。一般我们自己写的头文件是谁啊?是 i n t r i n s 点 h 啊, 是这样一个头文件,也就说你要使用这个函数,你在前面必须要包含这样一个头文件,因为这个函数有关的信息是在这样一个头文件里的啊,在这样一个头文件里的,大家记住啊,是 i n t r i n s 啊,这个 s 不要少。 好,那么在这个地方其实来了两下,两下就大概是两微秒,其实这个,呃,拉高啊,拉低,然后两微秒,这个拉高,这个过程很快的啊,不足一微秒,不足一微秒,总而言之,我们肯定是能在十五秒之内完成这样一个,哎,主动拉低,然后呢又迅速释放这样一个过程的,所以说这个地方不用太过于焦虑 啊,然后呢,我们拉高,拉高之后,后面呢是要采用,采用多少啊?哎,我们在这个地方就是十五加,呃,三十四十五微秒,对吧?四十五微秒, 至少四十五微秒。那我在这个地方我就直接写了一个六十微秒啊,写了一个六十微秒,那随后下面是写零啊,零也很简单,首先拉低,一直拉低,持续多少?持续持续六十微秒。然后呢再拉高,拉高。我们之前说了啊,这个地方你应该是至少,是啊,至少是一微秒,于是呢,我给他,哎,来个两微秒, 没有任何问题吧?啊,没有任何问题。好,那么接下来我们来看一下主设备啊,读, 读零或读一,这个时候其实是从设备向主设备发送数据,也就是主设备读,那这个过程呢,首先是主设备要拉低啊,拉低呢,至少一微秒, 所以说大家注意下我们这个代码,哎,我拉低了,然后呢两微秒,是吧?至少一微秒呢,我可以是两微秒,然后呢大家在想,接下来是我从机要发送数据,那么我主机是不是要把这个 要把这个数据线给释放,那怎么做?哎,我立,我要给他设为设为高电瓶啊,设置为高电瓶,也就意味着此时我这个主机呢把这个数据线释放了,释放了我从机是不是要去响应啊?比如说拉低啊,或者说,哎,进行一些其他操作,所以说这个地方是灰色的线,灰色的线表示的是,哎,我从机呢把这根线现在是拉低了啊, 拉低啊,那我这这个地方大家注意一下啊,我这个我主机释放之后,我要再等一等再读,是不是?你看我我我,我释放之后,你这个红设备肯定是要操作这个数据线,也是有一定也也是有一定时间的,所以说我不要太着急,我让他等个两微秒,哎,等个两微秒之后我再读 啊,并且呢这个地方不能太久啊,这个这两个这个地方不能太久,你比如说你来个二十秒就不行,为什么?你看我这,我这给释放了之后啊,这释放了之后,其实最终到这了是个高电饼,然后我这个从基呢,你可以把它给拉低,那么在这个过程中, 哎,后面这个地方我主机要进行裁量,也就是说意味着是在十五微秒之内啊,又拉高了,你其实就没读到零,就读到后面一了就错了, 是不是?所以说你这个地方的时间不能再太长,为什么要留这样一个时间?就是给从设备反应,因为从设备拉低这样一个过程可能要耗时,你不要太着急,对吧?你不要太着急,你刚这边一释放,那边还要再准备准备才行。还,你这边刚点完菜点,点完菜那边呢,要准备准备才能给你上菜,你不要这边刚坐下刚点菜,然后你就说,哎,我要吃饭了 啊,你要给我上彩,这是不对的,但是呢,你又等的不能时间太长啊,不能太长,好,那接下来就读吧啊,就读吧,那如果读到读到零呢? 啊,就是零读到一呢?大家想啊,如果这个地方读到一了,那这其实就是一个真,那我最终的这个就把这个一保存在这个 d a t 里面,最终返回这个 d a t 啊, 如果说读到是零的话,那这是零 if 后面这个条件为假,这不执行,那 else 后面这个执行,那就把零复制给 d a t 啊,最终呢?哎,最终呢?把这个 d a t 返回啊,总而言之不是零,就是一。那么在这个过程中,读完之后啊,十五秒,读完之后呢,其实我们还要再拉高啊,拉高呢?是, 哎,四十五为秒啊,至少这个四十五为秒,在这里呢,我们就直接来个整数五十为秒吧,啊,这样好看, 好,那关于读 e 呢,其实也是一样的,首先拉低啊,这个地方至少一元秒,一元秒之后要立马释放,其实这个释放啊,就是要把这个控制权交给我们这个从设备这个释放 啊,释放之后啊,释放之后,我这个,呃,从设备呢,相当于你要现在发 e 吧,从设备就可以不动它了,因为你现在已经是一个高电瓶了,对吧?大家不要看这啊,不用看这,虽然这是很快的啊,这个地方是很快的,你比如说我本来低电瓶,然后我释放,释放给它变成一个 高电瓶,然后我这个从记呢?哎,现在已经是高电瓶了,对吧?哎,不需要变了,不需要变了之后我只要,哎,隔一段时间去采样啊,隔一段时间去采样,整个过程在十五微秒之内完成就行了啊,整个过程在十五微秒之内完成就行了。好,那后面还是一样的,去去去,等五十微秒, 整个流程都是一样的啊,无非是读出来是在这样一个时间里读出来的零,还是读出来的是一。 好,那么在这个地方我们读的是一位,那一般我们写是写一个字节,读肯定也是读一个字节,怎么做呢?循环呗,对吧?循环呗,那每次读一位,那么大家来想发的时候是我们低位先传, 是不是啊?是不是?那收的时候肯定也是先收的低位,你看我每次循环来了一个 t m p, 这个 t m p 呢?它应该就是一个啊,一个低位啊,应该是一个低位,应该是逐渐往左移。下面我们来看一下这个过程啊,它是如何实现的? 好,为什么是这样一个算法?比如说,哎,我们假设啊,要发,就就是说这个 ds 幺八 b 二零,要给单片机发的是这样一个数据,那 发的时候应该是第一位先发,是不是先发这个一,然后呢?是零,然后一零一零刚好反过来,对吧?第一位先发,那么出入状态我们前面可以看出来啊,这个 d a t 出入状态它就是零零零零啊,零零。那么在第一次循环的时候,我这个 d a t 向右移移一位, 向右移一位,它还是零零零,因为本身就是零零零嘛,你向右移一位还是这个东西,然后我们这个 t m p 最开始先读到的是第一位,就是这个一,对吧?所以说这个 t m p 应该是零零零零零零七个零,一个一,然后呢,我们要让他左移七位,于是呢,这个低位就变到最高位去了啊,读进来这个一呢,直接蹦到最高位去了,然后呢?现在是怎么样让他俩获,获完之后啊?大家来看啊,这个东西和下面这个东西做货运算 啊,这个地方啊,这是做的是货运算,货运算就是,哎,只要有一个一,对应的一位一位的啊,一位一位的,看,那只要有一个一,结果就是一,那最终的结果得到它,再把它复制给 d a t, 那 么此时 d a t 就是 这个,哎,这个东西在这个里面真正有效的是谁啊?是这个一啊,后面这个零呢?是其实是初始的这些 零,对吧?那这个时候 t m p 它应该就是八个零,因为你读到的是零嘛? 好,那么现在给他左移七位啊,其实读到的是他,对吧?刚才这位是一,现在这位是零,然后给他移七,左移七位,这一位呢,就到这了啊, 这个第一位,这个零呢,和后面这七个零他不一样啊,后面这个七个零呢,是移移移动过程中产生的零,最开始这个零呢,是我读进来的这个零,然后呢和这个,哎,然后呢?和我这个 data 一 啊, data 一 又移一位, data 第一塔本来这个样子,又一位,这个一,是不是往右走了啊?就是我上一次读的这个值,最先读到这个第一位呢,现在逐渐的往右走啊,往右走,那随后呢进行货运算 啊,他和他进行货运算,那一或一还是一就保留下来了,就是后面这些东西有一的地方就保留下来,然后前面这个地方,哎,零或零还是零,总而言之,前面这个地方就相当于是, 哎,相当于什么?是把这一位给保留下来了,并且呢把这一位也保留下来了,是吧?就是我历史上历史读进来的这个值,和我当前读进来这个值都被保留下来了,并且呢,我历史读读到的这个值呢,是逐渐往右移的,那么我们此时再把这个 data 啊赋值为这样一个最新的值,那第三次循环,比如说我们要读它了,对吧?那对应的是,呃, t m p 等于一,那左移七位是不是得到这样一个值,那 d a t 又移一位啊,相当于是把这个零一 啊,零一放到这了,本来零一是顶头的,现在这个零一前面还有个零了,对吧?就是说相当于历史读读到的值始终往右,然后新读到的这个值呢?始终放在第一位,那么你看,做完逻辑货之后就是一零一了啊, 这是我历史读进来的纸,这就是这是我新读进来的纸,那么现在这个 d a t 呢?就是它,那依次类推,第三次循环,第四次循环,第五次,第六次,第七次,第八次。那么最终拿到的这个 d a t 呢?就是最开始发的这个啊,高位呢是零,低位是一, 所以说这个流程大家要明白,怎么回事啊?怎么回事?本质上呢,就是这个 d a t 里放的是什么? d a t 里放的是哎,已经读到的啊,已经读到的一些值,你比如说这里的,你这里的一啊,这里的一零,对吧? 每次都是历史里已经读到的,读到的内容,而且呢它是不断往右移,而这个 t m p 是 读到的某一位,然后呢,我把这个放到最高位,读到了这一位呢?我给他左移七位,就是把读到这个放到最高位,新读到的这个值我给他放在前面,然后把,哎,历史读到的这些值呢?逐渐往右移啊,逐渐往右移。 好,那么在这里大家可以特殊的记忆一下,就是当第一位先传的时候啊,第一位先传,那我们接受接收到的就是第一位,然后我要把它组组装成一个正常的数据,高位在前,低位在后,哎,它其实就可以进行这样一个 哎,这样一个过程,对吧?主要就是这啊,主要就是这,我们我们有一个 d a、 t, 它是用来存数据的,存历史的数据,那每次读的时候,每次每次这个进行的时候,我读的历史数据, 由于我最先读进来的在最高位,而最先读进来的又是其实本账他应该是第第一最低位,所以说他每次呢要逐渐往右移啊,历史读,历史进来的这个值呢?历史读进来的值呢?一直往右移,然后呢?新读进来的值,我给他放在最高位, 这个在逻辑上他也是自洽的。新的值放在最高位,那你旧的值肯定就得往右走了啊,你可以特殊的去记一下这样一个窍门。