IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 用Django写网页通过tcp—client,接收单片机所发的数据,进行数据处理后绘图展示。 -> 正文阅读

[Python知识库]用Django写网页通过tcp—client,接收单片机所发的数据,进行数据处理后绘图展示。

? ? ? ? 暑假的时候老师布置了一个作业,使用STM32f103c8t6制作简易示波器将波形检测后上传到网页进行描点绘图,这个小项目是我和同学一起完成的,我是负责网页的那一部分,我同学则是负责硬件部分。

? ? ? ? 附带网址:基于STM32的ESP8266WiFi模块波形检测仪

? ? ? ? 我是用Django为框架进行网页的编写。因为要绘图,所以要涉及到Echarts。

? ? ? ? 有关于Echarts可以进入官网进行了解:Echarts官网

? ? ? ? 下面是我的html代码

<script type="text/javascript" src="{% static 'echarts.js' %}"></script>引入E charts
<script type="text/javascript" src="{% static 'jquery.js' %}"></script>
<div class="box1"></div>
<script>
        var myChart = echarts.init(document.querySelector(".box1"));
        //var shuju=[1,2,3,45,6,4,10000]
    	function printf() {
            $.getJSON('http://127.0.0.1:8000/text/shujuku/', function (context) {
                shuju = context['date'];
                {#console.log(shuju);#}
            })
             {#console.log("======"+shuju)#}
        //3.初始化实例对象 echarts.init(dom容器)

        //4.指定配置项和数据
        var option = {
            title: {
                text: '电压'
            },
            xAxis: {
                boundaryGap: true,// 刻度离纵轴有无间隙,默认true有间距
                type: 'category',//'value' 数值轴,适用于连续数据。 'category' 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
                // 'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,
                // 在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。 'log' 对数轴。适用于对数数据。
                name: '  ',// 横轴名称
                nameTextStyle: {// 名称样式
                fontSize:15,
                color:'#333',
                fontWeight: 'bold'
                },
                axisLabel : {//坐标轴刻度标签的相关设置。如果这个字段不设置,echarts会根据屏宽及横坐标数据自动给出间隔
                // clickable:true,//并给图表添加单击事件  根据返回值判断点击的是哪里
                interval: 0,// 间隔长度,可自定义(如果是时间格式,echarts会自动处理)
                rotate: 40,// 文字倾斜度
                },
                data: ['  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ','  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ','  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ','  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ','  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ',
                        '  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ','  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ','  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ','  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ','  ', '  ', '  ','  ','  ','  ','  ', '  ', '  ', '  ',],// 横轴坐标值
                splitLine: {show: false},// 显示隐藏刻度线
            },
            yAxis: {
                type: 'value'
            },
            series: [{
                name:"电压",
                type: 'line',
                data: shuju,//[1, 23, 45, 5, 69, 69, 69, 69, 69],
                smooth:true,
            }]
        };
            myChart.setOption(option);
            window.addEventListener("resize", function() {
            // 让我们的图表调用 resize这个方法
            myChart.resize();
            });
        }
         var time1 = setInterval(function () {
                printf();

            }, 1000);
            clearInterval(function () {
                time1;
            })

</script>

? ? ? ? views视图函数代码

def sendtohtml():
    n = 1
    while n == 1:
        tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tcp_socket.connect(('192.168.4.1', 8888))
        print("连接成功")
        recv_data = tcp_socket.recv(1024)
        if n == 1:
            print("接收到数据:")
            date = []
            for i in recv_data.decode("utf-8"):
                date = date+[i]
                if len(date) > 3:
                    date = date[0]+date[1]+date[2]+date[3]
                    msg = ChartModel()
                    msg.c_time = date
                    msg.save()
                    print(msg.c_time)
                    date = []
            data_list = []
            time1 = ChartModel.objects.all()
            for a in time1:
                data_list = data_list + [a.c_time]
            if len(data_list) > 100:
                for c in range(25):
                    ChartModel.objects.all().first().delete()
            tcp_socket.close(),
            time.sleep(0.1)
            continue

    return HttpResponse()

def shujuku(request):
    data_list = []
    time1 = ChartModel.objects.all()
    for a in time1:
        data_list = data_list+[a.c_time]
    context = {
        'date': data_list,
    }
    return JsonResponse(data=context)

def send(request):
    t = threading.Thread(target=sendtohtml)  #双线程
    t.start()

    return render(request,'tubiao1.html')

? ? ? ? 接下来我会解释一下视图函数里面的代码

? ? ? ? 第一个sendtohtml(),这个函数主要是进行数据的接受和数据的处理,因为我们所接受到的数据是一串串字符串,并不是我们想要的数据,所以只能对这些数据进行数据处理,当我们把数据处理完之后,我们就把数据存进我们的数据库里面,当我们所存进的数据达到一定的量的时候,我们就会把多出来的数据进行删除。

? ? ? ? 第二个shujuku(request),这个函数是把数据库里面的数据一个个提取出来,之后发送到网页端,网页再把数据绘成图展示出来。

? ? ? ? 第三个send(request),这个函数的作用是对函数sendtohtml()进行引用,最后的再返回网页。

? ? ? ? 下面的是我的model代码

class ChartModel(models.Model):
    c_time = models.CharField(max_length=16,unique=False)
    class Meta:
        db_table = 'Chart'

? ? ? ? 这个代码只是单纯的创建一个数据库进行数据存储。

? ? ? ? 这些代码组合在一起就能实现数据的接收和绘图。

?

? ? ? ? 作者本人学代码是断断续续的学了一年,这是本人的第一个博客,语言有可能不通顺,当然代码也不一定是最好的,若有错误之处,望各位大佬赐教。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:21:19  更:2021-10-18 17:22:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:09:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码