arduino物联网学习

20200215 OLED屏幕使用教程

材料:

0.96英寸OLED屏幕(4针脚)

arduino板子

dht11 温湿度传感器

将OLED屏幕的SDA针脚接到A4口,SCL针脚接到A5接口0 (不太清楚为什么,只是看网上就这么接的)

DHT11 的DATA针脚接到2

软件

  1. 需要在arduino ide 中 安装两个库 < Adafruit_SSD1306.h> <Adafruit_GFX.h> 搜索ssd1306 和gfx安装即可

  2. 于此同时需要wire库和SimpleDHT库

  3. 需要软件PCtoLCD2002这个软件将汉字转换位16进制的形式进行表示

代码注释

#define OLED_RESET     4
Adafruit_SSD1306 display(128, 64, &Wire,OLED_RESET); //创建一个对象的作用,只知道前两个参数用来是OLED屏幕的分辨率 static const unsigned char PROGMEM str1[] =
{0x00,0x00,0x00,0x00,0x6F,0x80,0x10,0x80,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x80,
0x0F,0x00,0x00,0x00};/*"℃",0*/ //将十六进制字模放到这个数组中,这个字模由PCtoLCD2002产生 display.begin(SSD1306_SWITCHCAPVCC,0x3C); //开启屏幕,应该就是规定,需要这么写
display.setTextColor(WHITE);//开像素点发光
display.clearDisplay();//清屏
display.drawBitmap(40, 32, str2, 20, 20, 1); //汉字显示:前两个参数是位置,中间是字符,在后面两个是字模的大小,最后一个是字体大小,不知道为啥字模超过16*16就显示错了
display.display(); // 开显示
display.println("%"); //普通字符用这个生成就可以
display.setTextSize(1); //设置字体大小 设置一次后面的都可以生效,display.drawBitmap()函数的除外

完整代码

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<SimpleDHT.h>
int pin = 2; SimpleDHT11 dht11(pin);
#define OLED_RESET 4
Adafruit_SSD1306 display(128, 64, &Wire,OLED_RESET);
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
static const unsigned char PROGMEM str1[] =
{0x00,0x00,0x00,0x00,0x6F,0x80,0x10,0x80,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x80,
0x0F,0x00,0x00,0x00};/*"℃",0*/
//温度为
static const unsigned char PROGMEM str2[] =
{0x00,0x00,0x47,0x00,0x0F,0x00,0x09,0x00,0x6F,0x00,0x20,0x00,0x29,0x00,0x56,0x80,
0x56,0x80,0x7F,0x80};/*"温",0*/
static const unsigned char PROGMEM str3[] =
{0x00,0x00,0x00,0x00,0x35,0x80,0x7F,0x80,0x4A,0x00,0x4E,0x00,0x45,0x00,0x4A,0x00,
0x46,0x00,0x99,0x80};/*"度",1*/
static const unsigned char PROGMEM str4[] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
0x40,0x00,0x00,0x00};/*":",2*/
//湿度为
static const unsigned char PROGMEM str5[] =
{0x00,0x00,0x47,0x80,0x0F,0x80,0x88,0x80,0x69,0x80,0x36,0x00,0x56,0x80,0x56,0x80,
0x47,0x00,0x7F,0x80};/*"湿",0*/
static const unsigned char PROGMEM str6[] =
{0x00,0x00,0x00,0x00,0x35,0x80,0x7F,0x80,0x4A,0x00,0x4E,0x00,0x45,0x00,0x4A,0x00,
0x46,0x00,0x99,0x80};/*"度",1*/
static const unsigned char PROGMEM str7[] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
0x40,0x00,0x00,0x00};/*":",2*/ //智慧养猪舍
static const unsigned char PROGMEM str8[] =
{0x20,0x00,0x3E,0x7C,0x48,0x44,0x08,0x44,0xFF,0x44,0x14,0x44,0x22,0x7C,0x40,0x00,
0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10};/*"智",0*/
static const unsigned char PROGMEM str9[] =
{0x10,0x10,0xFE,0xFE,0x10,0x10,0x7C,0x7C,0x10,0x10,0xFE,0xFE,0x10,0x10,0x3F,0xF8,
0x00,0x08,0x1F,0xF8,0x00,0x08,0x3F,0xF8,0x01,0x00,0x48,0x84,0x48,0x12,0x87,0xF2};/*"慧",1*/
static const unsigned char PROGMEM str10[] =
{0x08,0x20,0x04,0x40,0x00,0x00,0x7F,0xFC,0x01,0x00,0x3F,0xF8,0x02,0x00,0xFF,0xFE,
0x04,0x40,0x08,0x20,0x34,0x58,0xC4,0x46,0x04,0x40,0x08,0x40,0x10,0x40,0x20,0x40};/*"养",2*/
static const unsigned char PROGMEM str11[] =
{0x00,0x40,0x88,0x44,0x53,0xF4,0x20,0x48,0x50,0x50,0x97,0xFE,0x10,0x40,0x10,0x80,
0x31,0xF8,0x53,0x08,0x95,0x08,0x11,0xF8,0x11,0x08,0x11,0x08,0xA1,0xF8,0x41,0x08};/*"猪",3*/
static const unsigned char PROGMEM str12[] =
{0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x30,0x18,0xCF,0xE6,0x01,0x00,0x01,0x00,
0x3F,0xF8,0x01,0x00,0x01,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10};/*"舍",4*/ void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.setTextColor(WHITE);//开像素点发光
display.clearDisplay();//清屏 // //display.setTextSize(2); //设置字体大小
// display.setCursor(1, 20);//设置显示位置
// display.println("i love you"); // display.setTextSize(2);//设置字体大小
// display.setCursor(15, 30);//设置显示位置
// display.println("你好");
//display.drawBitmap(30, 30, str1, 16, 16, 1); //画出字符对应点阵数据
// display.drawBitmap(40, 32, str2, 20, 20, 1); //画出字符对应点阵数据
// display.drawBitmap(60, 32, str2, 20, 20, 1); //画出字符对应点阵数据 //display.display(); // 开显示 } void loop() { display.clearDisplay();//清屏
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess)
{
return;
}
Serial.print("温度:");
Serial.print((float)temperature);
Serial.print("度 ");
Serial.print("相对湿度:");
Serial.print((float)humidity);
Serial.println("%");
//智慧养猪舍
display.drawBitmap(24, 8, str8, 16, 16,1);
display.drawBitmap(40, 8, str9, 16, 16,1);
display.drawBitmap(56, 8, str10, 16, 16,1);
display.drawBitmap(72, 8, str11, 16, 16,1);
display.drawBitmap(88, 8, str12, 16, 16,1);
//温度
display.drawBitmap(28, 35, str2, 10, 10,1);
display.drawBitmap(38, 35, str3, 10, 10,1);
display.drawBitmap(48, 35, str4, 10, 10,1);
display.setTextSize(1); //设置字体大小
display.setCursor(58, 37);//设置显示位置
display.println((float)temperature);
display.drawBitmap(88, 35, str1, 10, 10,1);
//湿度
display.drawBitmap(28, 48, str5, 10, 10,1);
display.drawBitmap(38, 48, str6, 10, 10,1);
display.drawBitmap(48, 48, str7, 10, 10,1);
display.setCursor(58, 50);//设置显示位置
display.println((float)humidity);
display.setCursor(90, 50);//设置显示位置
display.println("%");
display.display(); // 开显示 delay(10000); }

Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器 2021/12/17

一、硬件准备

USB转ESP8266两块、DHT11温度湿度传感器、ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别

USB转ESP8266 说明:为什么要买两块

二、软件准备

Arduino、EMQX(这是mqtt服务器可以部署在本地也可以放在远程服务器上)、MQTTBox(mqtt客户端程序)、如果是Window系统的话 安装相关USB驱动程序。

三、安装EMQX 下面介绍的方法是部署在远程服务器上。

先来说说mqtt协议:

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽、不可靠的网络的进行远程传感器和控制设备通讯等,正在日益成为物联网通信协议的重要组成部分。

MQTT服务器:

EMQX:在github上有5K以上的Star。

为什么要选择它?

  1. 非常小的通信开销(最小的消息大小为 2 字节);
  2. 支持各种流行编程语言(包括C,Java,Ruby,Python 等等)且易于使用的客户端;
  3. 支持发布 / 预定模型,简化应用程序的开发;
  4. 提供三种不同消息传递等级,让消息能按需到达目的地,适应在不稳定工作的网络传输需求。
  5. 他是开源的。

安装方法:

1、先找到下载地址:https://www.emqx.io/cn/downloads

选择如下:复制下载地址

(接下来这几步看着官方文档操作接可以了)

2、远程连接你的服务器 执行命令 : wget 刚才复制的网址

3 、解压下载的文件

4、进入到解压的文件夹里面:cd emqttd

配置成功。

5、浏览器输入你的服务器IP地址加18083 即可进入后台管理界面如:192.168.4.4:18083

账号是admin、密码是public 可以修改

如果不能访问,那就是你的服务器安全组没有允许18083该端口访问配置即可,(顺便把1883端口也允许访问)

四、安装Arduino IDE

https://www.arduino.cc/

五、配置Arduino IDE 的 ESP8266开发环境

打开Arduino IDE(这里安装IDE就不讲了,可以到官网下载安装包,不过要记住安装位置),在菜单"文件->首选项"弹出的对话框的"附加开发板管理网址"框中填入http://arduino.esp8266.com/stable/package_esp8266com_index.json

如图:

六、把ESP-01与DHT11连接

引脚接线:

DHT11---ESP8266-01

Singnal--IO2,

GND----GND,

VCC----VCC

DHT11引脚说明:

ESP8266-01/ESP8266-01S引脚说明:

Arduino 工具>管理库>搜索并安装SimpleDHT

七、打开Arduino IDE 编写代码

注意修改 Wi-Fi名和 Wi-Fi密码,如果是本地mqtt服务器的话地址填 127.0.0.1

#include <SimpleDHT.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h> int pinDHT11 = 2; // GPIO2 of ESP8266
const char* ssid = "XXXXX";//手机Wi-Fi热点
const char* password = "XXXX";//手机Wi-Fi密码
const char* mqtt_server = "XXXXXXX";//服务器网址或者IP地址 //const String macAddress = WiFi.macAddress();
//const char* clientID = macAddress.c_str(); //MAC地址
const char* clientID = "ESP8266_01_A"; //连接mqtt用户名 WiFiClient espClient;
PubSubClient client(espClient);
SimpleDHT11 dht11(pinDHT11); long lastMsg = 0;
char msg[50];
int value = 0; void setup() {
//pinMode(BUILTIN_LED, OUTPUT); // 将BUILTIN_LED引脚初始化为输出
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
} void setup_wifi() { delay(10);
WiFi.begin(ssid, password); // 我们从连接到WiFi网络开始
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println("WiFi connected");
} ///接收反馈
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
} } void reconnect() {
// 循环,直到我们重新连接
while (!client.connected()) { if (client.connect(clientID)) { //connected
Serial.print("MQTT连接成功"); // 连接mqtt成功
// client.publish("ESP_01主题", "hello world"); // 一旦连接,发布公告…
client.subscribe("ESP_01主题"); // 一旦连接,发布主题
} else {
delay(5000); // 等待5秒再重试
}
}
}
void loop() { if (!client.connected()) {
reconnect();
}
client.loop(); ////////温度湿度
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
return;
}
String tmp = "温度:"; //字符串拼接
tmp += String(temperature);
tmp += String(" 湿度:");
tmp += String(humidity); Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
client.publish("ESP_01主题", tmp.c_str());//发送主题
delay(2000);
////////温度湿度
}

八、烧录程序

用改装过的 USB转ESP8266 连接ESP-01连接电脑,准备烧录。

点击IDE左上角的箭头开始烧录。

九、测试程序

把烧录好的ESP8266,取下来,装到 USB转ESP8266 没改装的转换器上,插入电脑,打开IDE右上角的图标,即可看到运行状态。

十、打开MQTTBox 订阅ESP_01主题

使用python代码进行订阅

import paho.mqtt.client as mqtt
import time address = '192.168.3.29'
client = mqtt.Client("computer") def on_message(client,userdata,message):
print(str(message.payload.decode("utf-8")))
# print("主题为",message.topic)
# print("message qos=",message.qos)
# print("message retain flag=",message.retain) client.on_message = on_message
print("连接盒子")
client.connect(address)
#开始循环接受消息
client.loop_start()
client.subscribe('002') #订阅01主题
#client.publish('001')
time.sleep(1000)
client.loop_stop()

python版订阅

import paho.mqtt.client as mqtt
import time address = '192.168.3.29'
client = mqtt.Client("computer") def on_message(client,userdata,message):
print(str(message.payload.decode("utf-8")))
# print("主题为",message.topic)
# print("message qos=",message.qos)
# print("message retain flag=",message.retain) client.on_message = on_message
print("连接盒子")
client.connect(address)
#开始循环接受消息
client.loop_start()
client.subscribe('002') #订阅01主题
#client.publish('001')
time.sleep(1000)
client.loop_stop()

ESP8266破解校园网

烧录AT固件

打开串口调试助手进行调试

根据AT固件文档进行设置

arduino物联网学习的更多相关文章

  1. Arduino小车学习与研究

    信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(20135225) ---------- 索引 ...

  2. Arduino小车学习与研究博客

    Arduino小车学习与研究博客 信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(201352 ...

  3. 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus

    物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...

  4. Arduino入门学习

    一直听到许多做物联网.智能家居的控制器使用的是Arduino,从师兄那里拿到了一块Arduino开发板,进行了一下午的学习,感觉这个适合小孩子们玩:) 废话少说,总结一下,便于以后可能会用得到.我主要 ...

  5. 总结:ARM逻辑和高级C(朱老师物联网学习)

    开始学习朱老师物联网的视频是国庆节的那几天开始的,刚刚开始的时候是想自己在网上找一些嵌入式方面的视频资料,也找了很多的资料臂如“国嵌视频”“达内的视频”,之后也化了十几块钱在淘宝上面买了几十个G的视频 ...

  6. 解析-ESP01模块开发Arduino物联网wifi开关模块

    本文将解析<完美图解物联网Iot实操 ESP8266>中 第五章 P177页 动手做的代码2(使用SPIFFS文件系统的代码) 首先我们先动手使用Arduino IDE编译并且上传代码,上 ...

  7. 物联网学习之路——物联网通信技术:NBIoT

    NBIoT是什么 NB-IoT,Narrow Band Internet of Things,窄带物联网,是一种专为万物互联打造的蜂窝网络连接技术.顾名思义,NB-IoT所占用的带宽很窄,只需约180 ...

  8. 物联网学习之路——IoT概况

    物联网IoT概念 IoT,Internet of Things,即物物相连的互联网.它包含两层意思:一,以互联网为基础:二,物物相连,实现信息的交换和通信.物联网通过智能感知.识别技术与普适计算等通信 ...

  9. 物联网学习笔记——构建RESTFul平台1

    0.前言     前些时间顺着Yeelink学习了RESTFUL,使用PHP和Slim框架尝试实现简单的REST API,树莓派可通过GET方法获得JSON数据包,通过这种方式实现了树莓派和服务器(我 ...

随机推荐

  1. Mobile phones(poj1195)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 18453   Accepted: 8542 De ...

  2. 1091. Tmutarakan Exams

    1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...

  3. <学习opencv>图像变换

    拉伸.收缩.扭曲和旋转 统一调整大小 我们经常会遇到一些我们希望转换为其他尺寸的图像. 我们可能想要扩大或缩小图像; 这两项任务都是由同一个功能完成的. cv::resize() 该cv::resiz ...

  4. 教你10分钟对接人大金仓EF Core 6.x

    前言 目前.NET Core中据我了解到除了官方的EF Core外,还用的比较多的ORM框架(恕我孤陋寡闻哈,可能还有别的)有FreeSql.SqlSugar(排名不分先后).FreeSql和SqlS ...

  5. Cube 技术解读 | Cube 小程序技术详解

    本文为<Cube 技术解读>系列第三篇文章,之前上线的<支付宝新一代动态化技术架构与选型综述>与<Cube卡片技术栈解读>欢迎大家回顾. 魔方卡片(Cube)已在「 ...

  6. GeoWave实践2:使用命令行将本地矢量数据注入hbase并发布至GeoServer

    目录 步骤 补充 步骤 在GeoWave所在的节点打开两个会话窗口. 会话1 //运行GeoServer,默认端口8080 geowave gs run 会话2 //为GeoWave创建数据库Test ...

  7. 算法竞赛——BFS广度优先搜索

    BFS 广度优先搜索:一层一层的搜索(类似于树的层次遍历) BFS基本框架 基本步骤: 初始状态(起点)加到队列里 while(队列不为空) 队头弹出 扩展队头元素(邻接节点入队) 最后队为空,结束 ...

  8. linux 之 导出远程oracle数据库表结构及数据

    导出用户下所有表结构及数据 exp 用户名/密码@ip/数据库 file=文件路径/文件名.dmp owner='用户' 导出用户下所有表结构,不导出数据 exp 用户名/密码@ip/数据库 file ...

  9. Window10系统修改hosts文件的方法

    背景: 调试smtp程序时遇到问题,度娘说需要修改hosts文件 使用老方法修改了很久,始终无法保存 又百度了一下,在此重温,以加深记忆 方法: Step1.同时按住Windows+X Step2.选 ...

  10. 编写java程序压缩Linux本地目录

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6809285459722633736/ 创建工程 使用maven工程 勾选,然后下一步 填写基本信息 注意改一下编码 ...