首页 > 编程语言 >【Py4OH 1.1.0】新版发布及鸿蒙设备Python网络编程简介

【Py4OH 1.1.0】新版发布及鸿蒙设备Python网络编程简介

时间:2022-10-12 12:36:04浏览次数:81  
标签:1.1 Python Py4OH -- int fd print ID socket

         大家好,自从去年(没错,是去年)发布了​​Py4OH第一个正式版​​之后,我开启了佛系开发模式,没有继续更新了。有小伙伴可能会问:这一年你干嘛去了,为啥没继续更新???


嗯。。。还是有必要解释一下!


        Py4OH作为OpenHarmony轻量级设备上的Python开发平台,其目标是能够胜任工业应用程序的开发及部署,因此在稳定性上就会有要求,而稳定性只能通过时间验证。。。这一年里,我利用业余时间在多种场合下对Py4OH进行了应用开发测试,结果可谓是收获满满(臭虫多多),也因此有了这个Beta版本的Release。

 

Py4OH 1.1.0 Beta Release Notes:

  1. 优化REPL与设备的连接方式,增强连接稳定性
  2. 优化设备端内存利用率,减少长时间运行导致的内存碎片
  3. 重写Python内置函数print()的实现,解决高频打印时的内存泄露问题
  4. 重构外设接口(gpio,adc,i2c,uart)
  5. 新增网络接口(wifi,socket)
  6. 新增常用数学函数(sin,cos,log,......)


TODO:

  1. 适配小凌派开发板(RK2206)
  2. 适配拓维开发板(ESP32)
  3. 适配龙芯开发板(1C300B)
  4. 重构spi外设接口
  5. Bug Fix......


从上述介绍可以看出Py4OH 1.1.0新增了网络编程接口,那么具体如何使用呢?


废话不多说,直接上代码!!!


  1. TCP客户端编程

import socket
import gc
import os

# 创建客户端
client = socket.tcp_client()
# 打印客户端ID值
print('client = ', client)

# 连接服务端,成功返回 0,失败返回 -1
r = socket.connect(client, '192.168.3.3', 8989)

while r == 0 :
# 获取当前可收取的数据量
len = socket.available(client)

if len > 0 :
# 收取数据,
# 成功 r --> 0,失败 r --> -1
# 数据 d --> 列表类型
r, d = socket.recv(client, len)

if r == 0 :
print(d) # 打印收到的数据
socket.send(client, d) # 将数据原封不动发回

gc.collect()
os.usleep(10 * 1000)

 

TCP 客户端相关接口:

函数名

参数

返回值

功能

tcp_client()

TCP客户端ID值

创建TCP客户端

connect(fd, ip, port)

fd : int,客户端ID值

ip : string,IP地址

port : int,端口号

0 -- 连接成功

-1 -- 连接失败

通过ip地址和端口号连接到指定服务端

recv(fd, n)

fd : int,客户端ID值

n : int,字节数

(r, d)

r -- 0 成功,-1 失败

d -- 字节列表

最多收取n字节的TCP数据

send(fd, bytes)

fd : int,客户端ID值

bytes : list,字节列表

0 -- 发送成功

-1 -- 发送失败

发送TCP数据

available(fd)

fd : int,客户端ID值

n -- 字节数

获取当前有多少TCP数据可收取

close(fd)

fd : int,客户端ID值

关闭TCP客户端


  1. TCP 服务端编程

import socket
import wifi
import gc
import os

# 通过wifi模块获取当前设备IP地址
print('ip = ', wifi.ip_addr())
# 创建服务端
# 参数block指定服务端工作模式
# 阻塞模式 block -> True
# 非阻塞模式 block -> False
fd = socket.tcp_server(True)
# 打印服务端ID值
print('fd = ', fd)
# 监听设备8888端口,成功返回 0,失败返回 -1
r = socket.listen(fd, 8888)

print('r = ', r)

# 永久等待客户端连接(阻塞模式)
# 返回值 -> socket ID 用于与客户端通信
client = socket.accept(fd)

print('client = ', client)

feedback = [ord(c) for c in 'Tang ZuoLin']

while True:
# 接收客户端数据,最多收取30字节
r, d = socket.recv(client, 30)

if r == 0 :
print(d) # 打印收到的数据
socket.send(client, feedback) # 将feedback发回客户端

gc.collect()
os.usleep(10 * 1000)

 

TCP服务端相关接口:

函数名

参数

返回值

功能

tcp_server(block)

block : bool,是否阻塞

TCP服务端ID值

创建TCP服务端

listen(fd, port)

fd : int,服务端ID值

port : int,端口号

0 -- 监听成功

-1 -- 监听失败

监听指定端口

accept(fd)

fd : int,服务端ID值

socket id -- 通信ID值

接受客户端连接

close(fd)

fd : int,服务端ID值

关闭TCP服务端


  1. UDP 编程

import socket
import wifi
import gc
import os

# 通过wifi模块获取当前设备IP地址
print('ip = ', wifi.ip_addr())

# 创建通信端
point = socket.udp_point()
# 打印通信端ID值
print('point = ', point)

# 绑定设备端口,成功返回 0,失败返回 -1
r = socket.bind(point, 8989)

while r == 0 :
# 获取当前可收取的数据量
len = socket.available(point)

if len > 0 :
# 收取数据,
# 成功 r --> 0,失败 r --> -1
# 数据 d --> 列表类型
# 对端地址
# 对端端口
r, d, remote, port = socket.recvfrom(point, len)

if r == 0 :
print(d) # 打印收到的数据
print(remote) # 打印对端IP地址
print(port) # 打印对端通信端口
# 将数据原封不动发回
socket.sendto(point, d, remote, port)

gc.collect()
os.usleep(10 * 1000)

 

UDP 通信端相关接口:

函数名

参数

返回值

功能

udp_point()

UDP通信端ID值

创建UDP通信端

bind(fd, port)

fd : int,通信端ID值

port : int,端口号

0 -- 绑定成功

-1 -- 绑定失败

绑定UDP通信端口

recvfrom(fd, n)

fd : int,通信端ID值

n : int,字节数

(r, d, remote, port)

r -- 0 成功,-1 失败

d -- 字节列表

remote -- 对端地址

port -- 对端端口

最多收取n字节的UDP数据

sendto(fd, bytes, remote, port)

fd : int,通信端ID值

bytes : list,字节列表

remote : string,对端地址

port : int,对端通信端口

0 -- 发送成功

-1 -- 发送失败

发送UDP数据

available(fd)

fd : int,通信端ID值

n -- 字节数

获取当前有多少UDP数据可收取

close(fd)

fd : int,通信端ID值

关闭UDP通信端


既然提供了socket网络编程接口,那么wifi联网接口肯定是少不了的。

示例代码如下:

import wifi
import os

# 打印Py4OH版本号
print('version: ', os.version())

# 初始化wifi模块
wifi.wifi_init()

# 连接指定的wifi热点
r = wifi.connect('py4oh-test', '12345678')

print('r = ', r)

# 启动联网
r = wifi.start()

print('r = ', r)

# 打印当前设备IP地址
print('ip = ', wifi.ip_addr())


WIFI 联网相关接口:

函数名

参数

返回值

功能

wifi_init()

初始化WIFI模块

connect(id, pwd)

id : string,热点ID值

pwd : string,热点密码

0 -- 连接成功

-1 -- 连接失败

通过用户名和密码连接热点

start()

0 -- 启动成功

-1 -- 启动失败

开启设备联网

stop()

停止设备联网

is_ok()

True -- 联网成功

False -- 联网失败

获取设备联网状态

ip_addr()

设备IP地址

获取设备IP地址

wifi_deinit()

反初始化WIFI模块



Py4OH语言基础教程:

​https://www.bilibili.com/video/BV1Rf4y1Z7N4/​


Py4OH使用视频:

​https://harmonyos.51cto.com/show/9231​

 

Python设备开发系列文章:

​使用Python开发鸿蒙设备程序(0-初体验)​

​使用Python开发鸿蒙设备程序(1-GPIO外设控制)​

​使用Python开发鸿蒙设备程序(2-I2C应用实例)​

​使用Python开发鸿蒙设备程序(3-安防系统雏形)​

# 更多Python设备开发文章即将解锁。。。。。。

 

开源地址:

​https://gitee.com/delphi-tang/python-for-hos​

 

Enjoy it!

附件链接:

​Py4OH-v1.1.0-Beta-Hi3861​

​Py4OH-REPL-1.1.0-Beta​

​Socket-Demo​

​​​想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com/#bkwz​

标签:1.1,Python,Py4OH,--,int,fd,print,ID,socket
From: https://blog.51cto.com/harmonyos/5749384

相关文章

  • Python数据分析实战案例:统计分析微信朋友圈数据(附实操视频)
    "IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 本文内容将通过一个具体实例讲......
  • 为什么要让孩子学习Python
    "IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 每一个新领域都能给孩子们带来......
  • Python Parser的用法
    ------2022年10月12日11:56:29-------注意,在解析parse中,对于可选参数选取最长的名称,中划线转换为下划线--------PythonParser的用法文章目录[隐藏]目录一、介绍......
  • python 不可变数据类型--字符串
    不可变数据类型:字符串是不可变数据类型,但一些性质类似列表(每个位置都有索引),但因为是不可变数据类型,字符串生成了就不能发生改变(不能str[0]='d'),有些字符串方法‘改变了’,......
  • python中 yaml.dump 对dict dump成yaml文件时,给特定字符串保留(加上)单引号
    以下例子来源于https://www.cnblogs.com/saiminhou/p/13729119.htmlpythonyamldict对str类型加上单引号源数据:dict1={"user_id":23026,"contact":[{"na......
  • 力扣350(java&python)-两个数组的交集 II(简单)
    题目:给你两个整数数组 nums1和nums2,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑......
  • Python的常用库及区别——numpy、pandas、matplotlib、scipy
    1.Numpy  numpy是python科学计算的基础包,好多算法都是基于numpy构建的。其功能有:快速高效的多维数组ndarray用于对数组执行元素及计算以及直接对数组执行数字运......
  • python parser.parse_args action=‘store_true‘ 和 ‘store_false’
    store_true就是存储的值为true(store_false就是存储的值为false),用sh命令触发值的设置:parser.add_argument('-p',action='store_true',default=false)#pythontes......
  • Python基础一
    #变量名是区分大小写的#导入模块儿importrandomfromrandomimport*print('Helloworld!')print(len('HelloWorld'))#str()函数可以传入一个整型值,并求值为它的字符串......
  • hive-1.1.0-cdh5.9.0安装
    hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可......