新版本发布及鸿蒙设备Python网络编程介绍自从去年(是的,去年)Py4OH第一个正式版发布后,我就开始佛系开发模式,没有继续更新。可能有朋友会问:今年怎么去了,为什么不继续更新了?唔。..还是需要解释一下!Py4OH作为OpenHarmony轻量级设备上的Python开发平台,目标是能够开发和部署工业应用,因此对稳定性有要求,只能通过时间来验证。..在这一年里,我利用业余时间在各种场合对Py4OH进行了应用开发测试,结果可谓是硕果累累(bug不少),于是才有了这个Beta版的Release。Py4OH1.1.0Beta发布说明:优化REPL与设备连接,增强连接稳定性,优化设备内存利用率,减少长时间运行造成的内存碎片。重写Python内置函数print()的实现,解决高频打印重构外围接口(gpio、adc、i2c、uart)和添加网络接口(wifi、socket)和添加常用数学函数(sin、cos,log,...)TODO:适配小灵牌开发板(RK2206)适配拓维开发板(ESP32)适配龙芯开发板(1C300B)重构spi外设接口BugFix...从上面的介绍,我们可以看到Py4OH1.1.0增加了一个网络编程接口,那么具体如何使用呢?废话不多说,直接上代码!TCP客户端编程:importsocketimportgcimportos#创建客户端client=socket.tcp_client()#打印客户端ID值print('client=',client)#连接服务器,成功返回0,失败返回-1r=socket。connect(client,'192.168.3.3',8989)whiler==0:#获取当前可以接收的数据量len=socket.available(client)iflen>0:#接收数据,#成功r-->0,failr-->-1#datad-->listtyper,d=socket.recv(client,len)ifr==0:print(d)#打印接收到的数据socket.send(client,d)#将数据原封不动地发送回gc.collect()os.usleep(10*1000)TCP客户端相关接口:函数名参数返回值函数tcp_client()无TCP客户端ID值创建TCP客户端连接(fd,ip,port)fd:int,clientID值ip:string,IP地址port:int,端口号0--连接成功-1--连接失败通过ip地址和端口号连接到指定服务器recv(fd,n)fd:int,clientIDvaluen:int,bytecount(r,d)r--0成功,-1failured--字节列表接收到最多n个字节的TCP数据send(fd,bytes)fd:int,clientIDvaluebytes:list,bytelist0--发送成功-1--发送TCP数据可用(fd)fd:int,clientIDvaluen--bytecount获取当前可以采集多少个TCP数据#通过wifi模块获取当前设备IP地址print('ip=',wifi.ip_addr())#创建服务器#参数块指定服务器工作模式#阻塞模式块->True#非阻塞模式块->Falsefd=socket.tcp_server(True)#打印服务器ID值print('fd=',fd)#监听设备的8888端口,成功返回0,失败返回-1r=socket.listen(fd,8888)优先级nt('r=',r)#永久等待客户端连接(阻塞模式)#返回值->socketID用于与客户端通信client=socket.accept(fd)print('client=',client)feedback=[ord(c)forcin'TangZuoLin']whileTrue:#接收客户端数据,最多30字节r,d=socket.recv(client,30)ifr==0:print(d)#打印接收到的数据socket.send(client,feedback)#将反馈反馈给客户端gc.collect()os.usleep(10*1000)TCP服务器相关接口:函数名参数返回值函数tcp_server(block)block:bool,是否阻塞TCPserverID值创建TCP服务器listen(fd,port)fd:int,serverID值port:int,端口号0--监听成功-1--监听failure监听指定端口accept(fd)fd:int,serverID值socketid--通信ID值接受客户端连接close(fd)fd:int,serverID值未关闭TCPserverUDP编程:importsocketimportwifiimportgcimportos#通过wifi模块获取当前设备IP地址print('ip=',wifi.ip_addr())#创建通信终端point=socket.udp_point()#打印通信终端ID值print('point=',point)#绑定设备端口,成功返回0,失败返回-1r=socket.bind(point,8989)whiler==0:#获取当前可以接收的数据量len=socket.available(point)iflen>0:#接收数据,#成功r-->0,失败r-->-1#数据d-->listtype#peeraddress#peerportr,d,remote,port=socket.recvfrom(point,len)ifr==0:print(d)#打印接收到的数据print(remote)#打印对端IP地址print(port)#打印对端通信端口#将数据发送回套接字.sendto(point,d,remote,port)gc.collect()os.usleep(10*1000)UDP通信终端相关接口:函数名参数返回值函数udp_point()无UDP通信创建UDP通讯终端,终端ID值为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--peeraddressport--yes终端端口最多可以接收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网络接口肯定是少不了的。示例代码如下:importwifiimportos#打印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()nonenone初始化WIFI模块connect(id,pwd)id:string,热点ID值pwd:string,热点密码0--连接成功-1--连接失败通过用户名和密码连接热点start()None0--启动成功-1--启动失败启用设备联网stop()NoneNone停止设备联网is_ok()NoneTrue--networksuccessFalse--networkfailuregetdeviceNetworkingstatusip_addr()NodeviceIPaddress获取设备IP地址wifi_deinit()NoNo反初始化WIFImodule文章相关附件可点击以下链接下载:https://ost.51cto.com/resource/2322。https://ost.51cto.com/resource/2323。https://ost.51cto.com/resource/2324。了解更多开源知识,请访问:开源基础软件社区https://ost.51cto.com。
