物联网解决方案
返回列表 发新帖

自己写代码之局域网篇(2)OLED显示温湿度并进行UDP广播

[复制链接]

该用户从未签到

75

主题

209

帖子

1479

积分

超级版主

Rank: 8Rank: 8

积分
1479
QQ
发表于 2017-1-2 21:56:41  | 显示全部楼层 | 阅读模式

公开设备实时看 这是什么->

20:57
匿名用户
通过微信查询温湿度
20:52
匿名用户
通过微信控制多彩灯光
20:52
匿名用户
通过微信控制多彩灯光
20:52
匿名用户
通过微信控制多彩灯光
20:52
匿名用户
通过微信控制多彩灯光
20:52
匿名用户
通过微信控制多彩灯光
20:52
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信查询温湿度
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:51
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
20:50
匿名用户
通过微信控制多彩灯光
 

马上注册,免费领取开发板,一周变智能硬件开发达人!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 JUN 于 2017-1-2 22:03 编辑

之前的帖子还没做过DHT11温湿度的例子,这一个帖子就实现这个功能吧;

开发环境搭建:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=2761&extra=page%3D1
GPIO输出实验:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=2768&extra=page%3D1
GPIO输入实验:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=2786&extra=page%3D1
串口发送实验:http://bbs.kaifakuai.com/thread-2790-1-1.html
串口接收实验:http://bbs.kaifakuai.com/forum.p ... &extra=page%3D1
OLED驱动实验:http://bbs.kaifakuai.com/forum.p ... 2879&extra=page%3D1
PWN输出实验:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=2888&extra=page%3D1
AT指令系统资源篇:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=3104&extra=page%3D2
AT指令与定时器:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=3130#lastpost
AT指令FLASH操作:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=3131&extra=page%3D1
小e WIFI联网:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=3132&page=1&extra=#pid21019
局域网UDP数据传输:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=3145&page=1&extra=#pid21083
UDP实现RGB控制和状态获取:http://bbs.kaifakuai.com/forum.php?mod=viewthread&tid=3186&page=1&extra=#pid21345

先确定下程序思路:
  1.写好DHT11驱动,实现对环境温湿度的获取
  2. 写好OLED的驱动,让数据能够在屏幕上显示
  3. 做UDP广播收发,实现WIFI获取温湿度数据

DHT11部分:
1.首先,查看原理图,得知DHT11的IO口连接在GPIO5;
VX9Q4F0U4{TJ]U_{1WL[4W1.png

2.这个模块是以前玩51的时候玩的,单总线协议,对时序要求还蛮高的;不过好在现在ESP8266提供了一个精确度很高的US级延时,所以这都不是问题;

3.驱动我懒得写,直接移植了小e官方代码,底层头文件嵌套好多啊。。。改了半天,好歹是改好了,截个屏;
%]TYV4DK$C2M~DJ{BD~927U.png

定义了两个全局变量,放置温湿度数据:
extern char Warn,Hum;

4.串口打印出数据,查看数据是不是对的;(这不科学,我明明感到冷,温度还有20多度。。。。)
ED}UX{{0JOHCWE1R7F8FXI5.png


然后是OLED部分,这里记得=板子上的跳冒要插到合适位置,我就不上传图片了,好麻烦:

1.关于驱动,我在之前的帖子已经做过实验了,直接用,不重复写了,不过对于之前的代码,我做了一个数字的显示;
unsigned char Num_To_Str(unsigned char num)
{
        unsigned char Str;

        if(num==0) Str='0';
        else if(num==1) Str='1';
        else if(num==2) Str='2';
        else if(num==3) Str='3';
        else if(num==4) Str='4';
        else if(num==5) Str='5';
        else if(num==6) Str='6';
        else if(num==7) Str='7';
        else if(num==8) Str='8';

        return Str;
}

void OLED_Show_NUM(unsigned char x, unsigned char y,unsigned char num, unsigned char TextSize)
{
        unsigned char Str[2];
        Str[1]='\0';
        if(TextSize==1)
        {
                if(num>=100)
                {
                        Str[0]=Num_To_Str(num/100);
                        OLED_ShowStr(x,y,Str, TextSize);
                        Str[0]=Num_To_Str(num%100/10);
                        OLED_ShowStr(x+6,y,Str , TextSize);
                        Str[0]=Num_To_Str(num%10);
                        OLED_ShowStr(x+12,y,Str , TextSize);
                }else if(num<100&&num>10){
                        Str[0]=Num_To_Str(num%100/10);
                        OLED_ShowStr(x,y,Str , TextSize);
                        Str[0]=Num_To_Str(num%10);
                        OLED_ShowStr(x+6,y,Str , TextSize);
                }else if(num<10){
                        Str[0]=Num_To_Str(num%10);
                        OLED_ShowStr(x,y,Str , TextSize);
                }
        }
        else if(TextSize==2)
        {
                if(num>=100)
                {
                        Str[0]=Num_To_Str(num/100);
                        OLED_ShowStr(x,y,Str, TextSize);
                        Str[0]=Num_To_Str(num%100/10);
                        OLED_ShowStr(x+8,y,Str, TextSize);
                        Str[0]=Num_To_Str(num%10);
                        OLED_ShowStr(x+16,y,Str, TextSize);
                }else if(num<100&&num>10){
                        Str[0]=Num_To_Str(num%100/10);
                        OLED_ShowStr(x,y,Str, TextSize);
                        Str[0]=Num_To_Str(num%10);
                        OLED_ShowStr(x+8,y,Str, TextSize);
                }else if(num<10){
                        Str[0]=Num_To_Str(num%10);
                        OLED_ShowStr(x,y,Str , TextSize);
                }
        }
}

这样做是方便我的温湿度数据输入

废话不多说,直接上传显示效果:
P~1ECH(H%[VGDEW$L4VY`RL.png


....尴尬,我把温度和湿度数据写错位置了。。。

3.然后是对于UDP的操作,毕竟WIFI通讯才是我的重点;
这里的话,我修改了下位机的代码:
        if(strcmp(pdata,DHT11_UDP)==0)
                DHT11_internet();
        else
            RGB_internet(pdata);

都做成子函数的形式,直接调用,剩下的就是上位机部分,添加一个按键功能就行了
private void button17_Click(object sender, EventArgs e)
        {
            try
            {
                textBox2.Clear();
                textBox2.AppendText("DHT11");
                byte[] sendbytes = Encoding.Default.GetBytes(textBox2.Text);
                udpClient.Send(sendbytes, sendbytes.Length, ipEndPoint);//网络发送 发送区的数据
                textBox1.AppendText("获取RGB状态.....\r\n");
            }
            catch
            {
                textBox1.AppendText("数据发送失败.....\r\n");
            }
        }

内容不是很多;非常简单;
目前UDP支持的功能还是比较简单的,控制指令:
char *RED_E1="RED_E";
char *RED_U1="RED_U";
char *BLUE_E1="BLUE_E";
char *BLUE_U1="BLUE_U";
char *GREEN_E1="GREEN_E";
char *GREEN_U1="GREEN_U";
char *GET_RGB="Get_RGB";
char *DHT11_UDP="DHT11";

我把温度和湿度的位置调换回来了,本来想上传数据到上位机,但是我一下子没想好怎么做,以后想到再做这个功能吧,现在上传代码
上位机: 小E开发板AT指令控制端.exe (50.5 KB, 下载次数: 26)
程序源码: esp_iot_sdk_v1.4.0.rar (713.41 KB, 下载次数: 46)

回复

使用道具 举报

该用户从未签到

13

主题

133

帖子

1294

积分

意见领袖

Rank: 6Rank: 6

积分
1294
发表于 2017-1-3 09:19:11  | 显示全部楼层
底层都被你搞完了吗?
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

21

帖子

57

积分

冉冉新星

Rank: 2

积分
57
发表于 2017-1-4 09:29:05  | 显示全部楼层
好帖,以后搞了来交流
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2017-3-10 13:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    28

    帖子

    192

    积分

    冉冉新星

    Rank: 2

    积分
    192
    发表于 2017-2-18 15:12:00  | 显示全部楼层
    不错,收藏了,好好研究,谢谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-2 00:38
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    20

    帖子

    58

    积分

    冉冉新星

    Rank: 2

    积分
    58
    发表于 2017-3-2 01:12:58  | 显示全部楼层
    赞赞赞赞赞赞。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    25

    帖子

    94

    积分

    冉冉新星

    Rank: 2

    积分
    94
    发表于 2017-3-2 13:23:52  | 显示全部楼层
    牛,感谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-16 22:45
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    27

    帖子

    163

    积分

    冉冉新星

    Rank: 2

    积分
    163
    发表于 2017-3-16 22:13:35  | 显示全部楼层
    DHT11温湿度很不准,就是看看而已,用AM2320会比那个准很多,特别是湿度。AM2320支持单总线或者I2C的
    我现在在学习把ESP8266+STM32把温湿度上传到OneNET云服务器上,然后通过客户端访问
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    16

    积分

    新人求罩

    Rank: 1

    积分
    16
    发表于 2017-9-5 19:36:07  | 显示全部楼层
    解压以后没有BIN文件哎,肿么下载
    回复 支持 反对

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关于我们
    开发快官网
    关于我们
    联系我们
    帮助中心
    开发者中心
    快速入门
    视频教程
    社区活动
    免费开发板
    开发者大赛
    关注我们
    官方微博
    官方空间
    快速回复 返回顶部 返回列表

    湘公网安备 43019002000310号