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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 3.16 haas506开发教程-example-通过子线程检测串口指令数据 -> 正文阅读

[嵌入式]3.16 haas506开发教程-example-通过子线程检测串口指令数据

3.16 haas506开发教程-example-通过子线程检测串口指令数据

1.简介

?本案例使用子线程对串口所发送的数据进行处理和执行相应的逻辑操作。

2.测试代码

  • main.py

?在main.py中,先初始化haas506开发板上的led灯,然后开启子线程对串口助手发送过来的数据进行处理,最后在主线程中循环打印helloworld。

import utime as time
import app_led
import app_input

def main():
    app_led.led_init()
    #子线程检测数据输入
    app_input.start_input_cmd_thread()
    #主线程
    while True:
        time.sleep(1)
        #do something 
        #for example ,print helloworld
        print("hello world")

if __name__=="__main__":
    main()

  • app_led.py

?在app_led.py中初始化led灯,以及执行点亮和熄灭操作。

from driver import GPIO

led1=GPIO()
led2=GPIO()
led3=GPIO()
led4=GPIO()
led5=GPIO()
led1.open('led1')
led2.open('led2')
led3.open('led3')
led4.open('led4')
led5.open("led5")


def led_init():
    led1.write(0)
    led2.write(0)
    led3.write(0)
    led4.write(0)
    led5.write(0)
    
def write(key,value):
    if key=="led1":
        led1.write(value)
    elif key=="led2":
        led2.write(value)
    elif key=="led3":
        led3.write(value)            
    elif key=="led4":
        led4.write(value)
    elif key=="led5":
        led5.write(value)
    else:
        print("please check cmd that you send")
        pass

  • app_input

?在app_input.py中 ,先接收串口助手发送过来的json格式的数据,然后对该数据进行处理。

# -*- coding: UTF-8 -*-
import _thread
import ujson
import app_led


# data format :  {"led_ctrl":{"led1":1,"led2":1,"led3":1,"led4":1,"led5":1}}

def wait_input_cmd(id):
    while True:
        try:
            inputcmd = input('please input cmd:')
        except KeyboardInterrupt:
            _thread.exit()
        try:
            inputcmd_dict = ujson.loads(inputcmd)
            #判断所输入的数据 是否是字典格式
            if isinstance(inputcmd_dict,dict):
                #判断 "键led_ctrl" 所对应的"值"是否是字典格式
                if 'led_ctrl' in inputcmd_dict and isinstance(inputcmd_dict['led_ctrl'],dict):
                    for key,value in inputcmd_dict['led_ctrl'].items():
                        #修改led灯的电平值,实现点亮/熄灭led灯
                        app_led.write(key,value)
            else:
                print("cmd is not a dict")
                print(inputcmd_dict) 
        except ValueError:
            '''other cmd process'''
            print('input cmd is:' + inputcmd)
            pass
        finally:
            pass

def start_input_cmd_thread():
    _thread.start_new_thread(wait_input_cmd,(1,))


  • board.json
{
    "name": "haas506",
   "version": "1.0.0",
   "io": {
    "led1": {
      "type": "GPIO",
      "port": 0,
      "dir": "output",
      "pull": "pullup"
      },
  "led2": {
      "type": "GPIO",
      "port": 6,
      "dir": "output",
      "pull": "pullup"
      },
  "led3": {
      "type": "GPIO",
      "port": 7,
      "dir": "output",
      "pull": "pullup"
      },
  "led4": {
      "type": "GPIO",
      "port": 8,
      "dir": "output",
      "pull": "pullup"
      },
  "led5": {
      "type": "GPIO",
      "port": 9,
      "dir": "output",
      "pull": "pullup"
      },  
   "serial1":{
       "type":"UART",
       "port":0,
       "dataWidth":8,
       "baudRate":115200,
       "stopBits":1,
       "flowControl":"disable",
       "parity":"none"
       },
  "serial2":{
       "type":"UART",
       "port":1,
       "dataWidth":8,
       "baudRate":115200,
       "stopBits":1,
       "flowControl":"disable",
       "parity":"none"
       },
  "serial3":{
       "type":"UART",
       "port":2,
       "dataWidth":8,
       "baudRate":115200,
       "stopBits":1,
       "flowControl":"disable",
       "parity":"none"
       }
   },
   "debugLevel": "ERROR",
   "repl":"enable",
   "replPort":0
}

3.测试结果

?代码烧录完毕后,打开串口助手。主线程循环打印"helloworld”,子线程等待数据的输入。

在这里插入图片描述

?先在串口助手的编辑框中输入{“led_ctrl”:{“led1”:1,“led2”:1,“led3”:1,“led4”:1,“led5”:1}},然后勾选“加回车换行”,最后点击“发送”。这样会点亮5个小灯。

在这里插入图片描述

?也可以自定义点亮/熄灭某个小灯,如输入{“led_ctrl”:{“led1”:1,“led2”:0,“led3”:0,“led4”:0,“led5”:1}},点亮两个小灯和熄灭3个小灯。

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:27:28  更:2022-04-04 12:29:39 
 
开发: 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/26 4:51:56-

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