阿里云物联网平台体验(树莓派+Python篇)

阿里云物联网平台体验(树莓派+Python)

虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作。但是同时也见证了阿里云物联网团队从几十人到数百人的迅速扩张,其物联网平台所承载的内容也急速膨胀,物联网开发套件基础版、飞凤、Link Develop一站式开发平台、物联网开发平台高级版、飞燕、飞象、城市大脑、农业大脑和工业互联平台不一而足……,很难有精力真正熟悉和了解阿里云的每一款物联网产品。

这次有幸成为物联网平台的阿里云MVP体验官,可以从另外一个角度来体验阿里云物联网平台了。最早我们都是基于MCU单片+.NET MF平台,直接采用MQTT协议实现相关的代码对接阿里云平台,虽然也可以基于组态配置很灵活地接入物联网平台,但是对一些WEB、AI和云端开发的人来说还是有些陌生。正是因为这些需求,JS,Java,Python这些高级语言已经走入了硬件开发,可以直接在MCU芯片上运行,大大提速了物联网云和端的连接工作。

本篇文章就是采用高级语言Python基于树莓派进行物联网云端对接的(后续篇幅会介绍nodejs的云端对接)。

下面是阿里云团队快递过来的相关测试硬件:

1、 树莓派3B+  自带wifi和蓝牙

2、 DHT11温湿度模块

3、 LED灯模块

第一步:我们需要为树莓派安装操作系统

我们安装的是Raspbian固件,可以按如下链接介绍的步骤进行安装:https://www.yuque.com/cloud-dev/iot-tech/ig269q

第二步:安装阿里云平台的Python SDK

执行如下指令:$ pip install aliyun-python-sdk-iot-client

第三步:代码编写

在阿里云平台的说明文档:https://www.yuque.com/cloud-dev/iot-tech/rz6fpl 中已经提供了一个示例代码,不过功能相对简单,就是把两个随机数送到云端。

我们设计一个相对复杂的场景,我们首先要实现双向通信,不仅仅把传感器数据送到云端,我们还要让云端下发一个指令,控制相关的设备。

上传数据我们选择一个真实的传感器 DHT11,可以获取温度和湿度值。另外还有一个LED灯模块,通过云端下达的指令,控制灯亮和灯灭。

树莓派的管脚定义图如下:

DHT11模块共3根线,属于单总线通信,电源线我们接入5V-4pin,地线我们接入GND-6pin,通信pin我们接入GPIO16-36pin。LED模块也是3根线,我们电源线接入3V3-1pin,地线接入GND-9pin,控制线接入GPIO4-7pin。

LED的控制相对容易,就是控制管脚的高低电平即可。

led_pin = 4                       //GPIO为4

GPIO.setmode(GPIO.BCM)            //BCM的GPIO定义

GPIO.setup(led_pin, GPIO.OUT)     //设置为输出模式

点亮灯:

<span style="color:#f8f8f2"><code class="language-c">GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">output</span><span style="color:#f8f8f2">(</span>led_pin<span style="color:#f8f8f2">,</span> GPIO<span style="color:#f8f8f2">.</span>HIGH<span style="color:#f8f8f2">)</span></code></span>

 

<span style="color:#f8f8f2"><code class="language-c">GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">output</span><span style="color:#f8f8f2">(</span>led_pin<span style="color:#f8f8f2">,</span> GPIO<span style="color:#f8f8f2">.</span>LOW<span style="color:#f8f8f2">)</span></code></span>

 

DHT11相对比较复杂,我2010年曾经写过一篇博文。

 由于代码比较多,所以我们封装为一个函数,并且可以同时返回两个值,一个是温度T,一个是湿度H。

网上大部分Python的实例都是读一次温湿度的,如果要连续读,必须间隔3秒左右,否则很容易失败。由于linux不是实时系统,我们发现即使间隔3秒,无法正确获取温湿度值的现象也时有发生,并且有时候居然也有通过校验的错误值出现。

DHT11的数据Pin接入的是 GPIO16,所以我们定义pin的代码如下:

dht_pin =16

封装函数的代码如下:

<span style="color:#f8f8f2"><code class="language-c">def <span style="color:#e6db74"><span style="color:#a6e22e">GetDTH</span></span><span style="color:#f8f8f2"><span style="color:#f8f8f2">(</span></span><span style="color:#f8f8f2"><span style="color:#f8f8f2">)</span></span><span style="color:#f8f8f2">:</span>  data <span style="color:#f8f8f2">=</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">]</span>j <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span> GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">setup</span><span style="color:#f8f8f2">(</span>dht_pin<span style="color:#f8f8f2">,</span> GPIO<span style="color:#f8f8f2">.</span>OUT<span style="color:#f8f8f2">)</span>GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">output</span><span style="color:#f8f8f2">(</span>dht_pin<span style="color:#f8f8f2">,</span> GPIO<span style="color:#f8f8f2">.</span>LOW<span style="color:#f8f8f2">)</span>time<span style="color:#f8f8f2">.</span><span style="color:#e6db74">sleep</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">0.02</span></span><span style="color:#f8f8f2">)</span>GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">output</span><span style="color:#f8f8f2">(</span>dht_pin<span style="color:#f8f8f2">,</span> GPIO<span style="color:#f8f8f2">.</span>HIGH<span style="color:#f8f8f2">)</span>GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">setup</span><span style="color:#f8f8f2">(</span>dht_pin<span style="color:#f8f8f2">,</span> GPIO<span style="color:#f8f8f2">.</span>IN<span style="color:#f8f8f2">)</span><span style="color:#66d9ef"><span style="color:#f92672">while</span></span> GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">input</span><span style="color:#f8f8f2">(</span>dht_pin<span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">==</span> GPIO<span style="color:#f8f8f2">.</span>LOW<span style="color:#f8f8f2">:</span><span style="color:#66d9ef"><span style="color:#f92672">continue</span></span><span style="color:#66d9ef"><span style="color:#f92672">while</span></span> GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">input</span><span style="color:#f8f8f2">(</span>dht_pin<span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">==</span> GPIO<span style="color:#f8f8f2">.</span>HIGH<span style="color:#f8f8f2">:</span><span style="color:#66d9ef"><span style="color:#f92672">continue</span></span><span style="color:#66d9ef"><span style="color:#f92672">while</span></span> j <span style="color:#f8f8f2"><</span> <span style="color:#ae81ff"><span style="color:#ae81ff">40</span></span><span style="color:#f8f8f2">:</span>k <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#66d9ef"><span style="color:#f92672">while</span></span> GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">input</span><span style="color:#f8f8f2">(</span>dht_pin<span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">==</span> GPIO<span style="color:#f8f8f2">.</span>LOW<span style="color:#f8f8f2">:</span><span style="color:#66d9ef"><span style="color:#f92672">continue</span></span><span style="color:#66d9ef"><span style="color:#f92672">while</span></span> GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">input</span><span style="color:#f8f8f2">(</span>dht_pin<span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">==</span> GPIO<span style="color:#f8f8f2">.</span>HIGH<span style="color:#f8f8f2">:</span>k <span style="color:#f8f8f2">+</span><span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">1</span></span><span style="color:#66d9ef"><span style="color:#f92672">if</span></span> k <span style="color:#f8f8f2">></span> <span style="color:#ae81ff"><span style="color:#ae81ff">100</span></span><span style="color:#f8f8f2">:</span><span style="color:#66d9ef"><span style="color:#f92672">break</span></span><span style="color:#66d9ef"><span style="color:#f92672">if</span></span> k <span style="color:#f8f8f2"><</span> <span style="color:#ae81ff"><span style="color:#ae81ff">8</span></span><span style="color:#f8f8f2">:</span>data<span style="color:#f8f8f2">.</span><span style="color:#e6db74">append</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">)</span><span style="color:#66d9ef"><span style="color:#f92672">else</span></span><span style="color:#f8f8f2">:</span>data<span style="color:#f8f8f2">.</span><span style="color:#e6db74">append</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">1</span></span><span style="color:#f8f8f2">)</span>     j <span style="color:#f8f8f2">+</span><span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">1</span></span>humidity_bit <span style="color:#f8f8f2">=</span> data<span style="color:#f8f8f2">[</span><span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">:</span><span style="color:#ae81ff"><span style="color:#ae81ff">8</span></span><span style="color:#f8f8f2">]</span>humidity_point_bit <span style="color:#f8f8f2">=</span> data<span style="color:#f8f8f2">[</span><span style="color:#ae81ff"><span style="color:#ae81ff">8</span></span><span style="color:#f8f8f2">:</span><span style="color:#ae81ff"><span style="color:#ae81ff">16</span></span><span style="color:#f8f8f2">]</span>temperature_bit <span style="color:#f8f8f2">=</span> data<span style="color:#f8f8f2">[</span><span style="color:#ae81ff"><span style="color:#ae81ff">16</span></span><span style="color:#f8f8f2">:</span><span style="color:#ae81ff"><span style="color:#ae81ff">24</span></span><span style="color:#f8f8f2">]</span>temperature_point_bit <span style="color:#f8f8f2">=</span> data<span style="color:#f8f8f2">[</span><span style="color:#ae81ff"><span style="color:#ae81ff">24</span></span><span style="color:#f8f8f2">:</span><span style="color:#ae81ff"><span style="color:#ae81ff">32</span></span><span style="color:#f8f8f2">]</span>check_bit <span style="color:#f8f8f2">=</span> data<span style="color:#f8f8f2">[</span><span style="color:#ae81ff"><span style="color:#ae81ff">32</span></span><span style="color:#f8f8f2">:</span><span style="color:#ae81ff"><span style="color:#ae81ff">40</span></span><span style="color:#f8f8f2">]</span>humidity <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span>humidity_point <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span>temperature <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span>temperature_point <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span>check <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#66d9ef"><span style="color:#f92672">for</span></span> i in <span style="color:#e6db74">range</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">8</span></span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">:</span>humidity <span style="color:#f8f8f2">+</span><span style="color:#f8f8f2">=</span> humidity_bit<span style="color:#f8f8f2">[</span>i<span style="color:#f8f8f2">]</span> <span style="color:#f8f8f2">*</span> <span style="color:#ae81ff"><span style="color:#ae81ff">2</span></span> <span style="color:#f8f8f2">*</span><span style="color:#f8f8f2">*</span> <span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">7</span></span><span style="color:#f8f8f2">-</span>i<span style="color:#f8f8f2">)</span>humidity_point <span style="color:#f8f8f2">+</span><span style="color:#f8f8f2">=</span> humidity_point_bit<span style="color:#f8f8f2">[</span>i<span style="color:#f8f8f2">]</span> <span style="color:#f8f8f2">*</span> <span style="color:#ae81ff"><span style="color:#ae81ff">2</span></span> <span style="color:#f8f8f2">*</span><span style="color:#f8f8f2">*</span> <span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">7</span></span><span style="color:#f8f8f2">-</span>i<span style="color:#f8f8f2">)</span>temperature <span style="color:#f8f8f2">+</span><span style="color:#f8f8f2">=</span> temperature_bit<span style="color:#f8f8f2">[</span>i<span style="color:#f8f8f2">]</span> <span style="color:#f8f8f2">*</span> <span style="color:#ae81ff"><span style="color:#ae81ff">2</span></span> <span style="color:#f8f8f2">*</span><span style="color:#f8f8f2">*</span> <span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">7</span></span><span style="color:#f8f8f2">-</span>i<span style="color:#f8f8f2">)</span>temperature_point <span style="color:#f8f8f2">+</span><span style="color:#f8f8f2">=</span> temperature_point_bit<span style="color:#f8f8f2">[</span>i<span style="color:#f8f8f2">]</span> <span style="color:#f8f8f2">*</span> <span style="color:#ae81ff"><span style="color:#ae81ff">2</span></span> <span style="color:#f8f8f2">*</span><span style="color:#f8f8f2">*</span> <span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">7</span></span><span style="color:#f8f8f2">-</span>i<span style="color:#f8f8f2">)</span>check <span style="color:#f8f8f2">+</span><span style="color:#f8f8f2">=</span> check_bit<span style="color:#f8f8f2">[</span>i<span style="color:#f8f8f2">]</span> <span style="color:#f8f8f2">*</span> <span style="color:#ae81ff"><span style="color:#ae81ff">2</span></span> <span style="color:#f8f8f2">*</span><span style="color:#f8f8f2">*</span> <span style="color:#f8f8f2">(</span><span style="color:#ae81ff"><span style="color:#ae81ff">7</span></span><span style="color:#f8f8f2">-</span>i<span style="color:#f8f8f2">)</span>tmp <span style="color:#f8f8f2">=</span> humidity <span style="color:#f8f8f2">+</span> humidity_point <span style="color:#f8f8f2">+</span> temperature <span style="color:#f8f8f2">+</span> temperature_point<span style="color:#66d9ef"><span style="color:#f92672">if</span></span> check <span style="color:#f8f8f2">==</span> tmp<span style="color:#f8f8f2">:</span><span style="color:#66d9ef"><span style="color:#f92672">return</span></span> temperature<span style="color:#f8f8f2">,</span>humidity<span style="color:#66d9ef"><span style="color:#f92672">else</span></span><span style="color:#f8f8f2">:</span>print <span style="color:#a6e22e"><span style="color:#e6db74">"wrong"</span></span><span style="color:#66d9ef"><span style="color:#f92672">return</span></span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">,</span><span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span>   </code></span>

这些准备工作做好后,我们要在云端定义相关产品和设备了。和阿里云官方示例不一样的是,我们额外增加了一个属性LED,具备读写能力,枚举型变量,0-表示关灯,1-表示开灯

这个定义好后,我们创建设备,并且获取设备的三元组。由于官方提供的示例仅仅是模拟数据,并且是单向上传,我们需要改造一下。

在main函数里,增加这句代码:

<span style="color:#f8f8f2"><code class="language-c">client<span style="color:#f8f8f2">.</span>on_message <span style="color:#f8f8f2">=</span> on_message</code></span>

表示我们可以获取云端推送的信息。

 我们云端推送的信息内容如下:

<span style="color:#f8f8f2"><code class="language-c"><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"method"</span></span><span style="color:#f8f8f2">:</span><span style="color:#a6e22e"><span style="color:#e6db74">"thing.service.property.set"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"id"</span></span><span style="color:#f8f8f2">:</span><span style="color:#a6e22e"><span style="color:#e6db74">"169885527"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"params"</span></span><span style="color:#f8f8f2">:</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"LED"</span></span><span style="color:#f8f8f2">:</span><span style="color:#ae81ff"><span style="color:#ae81ff">1</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"version"</span></span><span style="color:#f8f8f2">:</span><span style="color:#a6e22e"><span style="color:#e6db74">"1.0.0"</span></span><span style="color:#f8f8f2">}</span></code></span>

我们需要获取LED的值,所以on_message函数我们要增加一些内容:

<span style="color:#f8f8f2"><code class="language-c">setjson <span style="color:#f8f8f2">=</span> json<span style="color:#f8f8f2">.</span><span style="color:#e6db74">loads</span><span style="color:#f8f8f2">(</span>msg<span style="color:#f8f8f2">.</span>payload<span style="color:#f8f8f2">)</span>led <span style="color:#f8f8f2">=</span> setjson<span style="color:#f8f8f2">[</span><span style="color:#a6e22e"><span style="color:#e6db74">'params'</span></span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">[</span><span style="color:#a6e22e"><span style="color:#e6db74">'LED'</span></span><span style="color:#f8f8f2">]</span>
GPIO<span style="color:#f8f8f2">.</span><span style="color:#e6db74">output</span><span style="color:#f8f8f2">(</span>led_pin<span style="color:#f8f8f2">,</span><span style="color:#f8f8f2">(</span>GPIO<span style="color:#f8f8f2">.</span>HIGH <span style="color:#66d9ef"><span style="color:#f92672">if</span></span> led<span style="color:#f8f8f2">==</span><span style="color:#ae81ff"><span style="color:#ae81ff">1</span></span> <span style="color:#66d9ef"><span style="color:#f92672">else</span></span> GPIO<span style="color:#f8f8f2">.</span>LOW <span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">)</span></code></span>

根据led的值,我们开灯或者关灯。

 相关代码修改好后,我们就可以上传到树莓派设备,开始运行了,如下图所示:

这个时候我们查看云端设备的状态,会发现数据已经正常上传到云端了。

我们在云端产品的在线调试面板进行数据下发测试

我们发送0或1,会发现LED灭或亮了。

以上,我们会发现通过我们所熟悉的Python语言,就可以轻松编写物联网代码了。

本文相关的代码文件:alios_ht_all.py

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云物联网边缘计算加载MQTT驱动

写在前面 本文在LinkEdge快速入门样例驱动的基础上&#xff0c;加载了MQTT订阅的客户端&#xff0c;使得边缘端容器可以通过MQTT获得外部数据。 1. 系统需求 物联网边缘计算平台&#xff0c;又名Link IoT Edge[1]。在物联网边缘计算帮助文档中的 “快速入门”描述了…

完爆 Best Fit,看阿里如何优化 Sigma 在线调度策略节约亿级成本

2018 年“双 11”的交易额又达到了一个历史新高度 2135 亿。相比十年前&#xff0c;我们的交易额增长了 360 多倍&#xff0c;而交易峰值增长了 1200 多倍。相对应的&#xff0c;系统数呈现爆发式增长。系统在支撑“双 11”过程中的复杂度和难度呈现指数级形式上升趋势。 作为…

重磅!阿里巴巴工程师获得 containerd 社区席位,与社区共建云时代容器标准

重磅&#xff01;阿里巴巴工程师获得 containerd 社区席位&#xff0c;与社区共建云时代容器标准 11 月 29 日&#xff0c;CNCF containerd 社区正式宣布&#xff1a;两位阿里巴巴工程师正式获得 containerd 社区席位&#xff0c;成为 containerd 社区 Reviewer&#xff0c;未…

RabbitMQ管控台操作手册

文章目录一、MQ管控台配置1.1. 修改guest用户的默认密码1.2. 创建Virtual Hosts1.3. 创建用户1.4. 给Virtual Hosts指定用户1.5. 给Virtual Hosts创建监控用户1.6. 给Virtual Hosts指定监控用户二、 验证2.1.给proj-01项目配置mq连接信息2.2.为proj-01项目声明队列和交换机2.3.…

只有程序员才能读懂的三国演义(一)

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | popsuper1982责编&#xff5c;阿秃这是通过三国演义串起操作系统的原理。第一回&#xff1a;宴桃园豪杰三结义&#xff0c;开放平台启动内核话说天下大势&#xff0c;分久必合&#xff0c;合久必分。IT江湖起起伏伏&#xff…

基于协同过滤算法的推荐

基于协同过滤算法的推荐 &#xff08;本实验选用数据为真实电商脱敏数据&#xff0c;仅用于学习&#xff0c;请勿商用&#xff09; 数据挖掘的一个经典案例就是尿布与啤酒的例子。尿布与啤酒看似毫不相关的两种产品&#xff0c;但是当超市将两种产品放到相邻货架销售的时候&a…

python三菱_三菱机器人melfarxm.ocx控件的Python使用,MelfaRxMOCX,python,用法

1. 安装控件 \MelfaRXM\MelfaRXM_Dev\Redist\Installer2. 在WINDOWS/System32里找到MelfaRxM.ocx3.把OCX控件转成C#的DLLa.打vs的开发人员命令行b.把刚刚的OCX放到命令行显示的目录c.在命令输入 &#xff1a; aximp MelfaRxM.ocx生成的DLL就是pythonnet可用调用的DLL的4.p…

如何基于阿里云搭建适合初创企业的轻量级架构?

----基于阿里云搭建的适合初创企业的轻量级架构 前言 在项目的初期往往存在很多变数&#xff0c;业务逻辑时刻在变&#xff0c;而且还要保证快速及时&#xff0c;所以&#xff0c;一个灵活多变、快速部署、持续集成并可以适应多种情况的架构便显得尤为重要。本文主要介绍基于阿…

年底了,程序员如何谈加薪?

前两天&#xff0c;我和朋友一块出去吃饭&#xff0c;他说了一个哭笑不得的事儿&#xff1a;“我面了一个2年经验的男孩&#xff0c;张嘴就要20k&#xff0c;我去了&#xff0c;我在公司呆了7年啊&#xff0c;才22k好吗&#xff1f;” 其实&#xff0c;他的问题并不是特例&…

数据库中间件介绍

文章目录 什么是数据库中间件&#xff1f;Smart-client 模式优点缺点 Proxy 模式优点缺点 单元化架构优点缺点 总结 数据库中间件是连接数据库和应用程序之间的软件层&#xff0c;用于简化数据库管理、提高性能和可伸缩性&#xff0c;同时提供额外的功能和服务。在分布式系统和…

基于阿里云物联网平台,我们这样实现简易出入监控

本文通过一个简单实例&#xff0c;主要介绍了如何使用树莓派快速接入阿里云iot platform&#xff0c;并实现了一个简易的监控人员出入并拍照上送钉钉群的场景 场景 在公司大门入口处布点树莓派和红外感应&#xff0c;实现出入口人员出入时&#xff0c;自动拍照并上送钉钉群机器…

RabbitMQ消息流转图

生产者生产消息&#xff0c;发送到MQ的交换机(exchange)上&#xff0c;交换机可以绑定多个队列&#xff08;Message Queue&#xff09;。这个图中有3个队列&#xff0c;只有一个队列收到了消息&#xff0c;这是因为咱们的交换机是有路由策略的&#xff0c;这个路由就是Routerke…

结合实际场景谈一谈微服务配置

作为 Nacos 5W1H 的系列文章&#xff0c;本文将围绕“Where”&#xff0c;讲述 Nacos 配置管理的三个典型的应用场景&#xff1a; 数据库连接信息限流阈值和降级开关流量的动态调度上一篇&#xff1a;Nacos帮我解决了什么问题&#xff1f; 数据库连接信息 曾经有朋友跟我聊过…

哈工大人工智能研究院院长刘劼:AIoT 核心在“智”不在“联”,需云边端协同...

受访者 | 刘劼采访者 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;物联网是继计算机、互联网和移动通信之后的又一次信息产业的革命性发展。近几年来&#xff0c;物联网发展迅速&#xff1a;据研究机构IDC公司预测&#xff0c;到2020年&#xff0c;物联…

RabbitMQ 管控台配置导入导出和重要性

背景&#xff1a;rabbitmq100个节点&#xff0c;做迁移&#xff0c;现在linux6环境&#xff0c;想升级到linux7版本&#xff0c;然后把rabbitmq部署到linux7版本上 怎么去做呢&#xff1f; 不可能把rabbitmq重新构建好&#xff0c;再把对应的交换机、绑定、配置重新设置一遍&am…

使用Spring整合Quartz轻松完成定时任务

文章目录1. 必不可少jar包依赖2. 编写任务调度类013. 编写任务调度类024. quartz配置文件5. 测试service6. 效果图开发环境版本jdk1.8Maven3.6.1springSpring 4.2.6.RELEASEIdea2019 1. 必不可少jar包依赖 <dependency><groupId>org.springframework</groupId&g…

太真实了:程序员等级图鉴

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 肥又君责编&#xff5c;阿秃程序员是一个非常神奇的工种&#xff0c;他们对技术有特殊的崇拜&#xff0c;有着严格的等级划分&#xff0c;不同级别的程序员有什么不同之处呢&#xff1f;Let us 瞅瞅 &#xff5e;日常工作日常…

windows故障转移群集和mysql_Windows 2016 无域故障转移群集部署方法 超详细图文教程...

故障转移群集是一个很实用的功能,而windows在2016版本开始,终于支持不用域做故障转移群集.在群集中,我们可以设定一个"群集IP"而客户端只需要根据这个"群集IP"就能连接当前群集的主服务器.而不必关心群集服务器之间的替换.而更棒的是,它是"去中心&quo…

Dubbo下一站:Apache顶级项目

近日&#xff0c;在Apache Dubbo开发者沙龙杭州站的活动中&#xff0c;阿里巴巴中间件技术专家曹胜利(展图)向开发者们分享了Dubbo2.7版本的规划。 本文将为你探秘 Dubbo 2.7背后的思考和实现方式。 Dubbo 2.7 将围绕 异步支持优化、元数据改造&#xff0c;引入JDK8的特性、Net…

Java 中判断连接Oracle数据库连接成功

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Application {public static Connection getConnection() {Connection conn null;try { //连接driver为&#xff1a;oracle.jdbc.driver.OracleDriver//或者oracle…