昉星光2支持运行完整的Linux发行版操作系统, 所以可以直接运行Python等高级语言. HTTP, MQTT等操作非常轻松便捷, 也可以直接使用纯软件开发的包管理工具, 比如说pip/uv, 开发体验非常好.
我甚至用上了比较新的Python包管理工具uv, 它其实不仅仅是包管理--我原本使用Portey做包管理和虚拟环境 , pyenv做Python本身的版本管理, 而现在一个uv就可以完成所有的这些工作, 而且速度提升确实非常明显, 同时它下载的依赖类似node的pnpm, 不同项目间同样的依赖只是多一份软链接, 不会反复占用空间.
虽然在官网中我无法找到RISC-V或者risc或者riscv相关的内容,
但是在官方的安装脚本https://astral.sh/uv/install.sh中, 还是可以找到对riscv的支持, 所以也是放心运行curl -LsSf https://astral.sh/uv/install.sh | sh进行安装.
"riscv64gc-unknown-linux-gnu")
_archive="uv-riscv64gc-unknown-linux-gnu.tar.gz"
if ! check_glibc "2" "31"; then
_archive=""
fi
if [ -n "$_archive" ]; then
echo "$_archive"
return 0
fi
;;
我准备测试一下物联网中非常经典的MQTT操作., 并且实现一个用MQTT这种发布-订阅的形式去实现一个请求-响应模型, 同时MQTT v5对此本身也有提供更便捷的支持. 注意其中提到的Server和Client是相对于请求-响应模型而言的, 对于底层的MQTT来说他们都是Client(例如Server的代码中import paho.mqtt.client as mqtt就很明显, 我变量名和参数名的命名规则也是保持一致), Broker是client.connect时连接的对象.
Client:
import paho.mqtt.client as mqtt
from paho.mqtt.subscribeoptions import SubscribeOptions
from paho.mqtt.properties import Properties
from paho.mqtt.packettypes import PacketTypes
import time
def on_message(client, userdata, message):
print ('response received at client')
print (message.payload)
client = mqtt.Client(client_id='client', protocol=mqtt.MQTTv5)
client.tls_set(tls_version=mqtt.ssl.PROTOCOL_TLS)
client.username_pw_set("test_client_username", "password")
client.connect("suburl.s1.eu.hivemq.cloud", 8883, 10)
client.subscribe('common', options=SubscribeOptions(noLocal=True))
client.on_message = on_message
client.subscribe('response')
publish_properties = Properties(PacketTypes.PUBLISH)
publish_properties.ResponseTopic = 'response'
publish_properties.CorrelationData = b"334"
client.publish('common', "client message", 1, properties=publish_properties)
print ('request sent from client')
client.loop_start()
time.sleep(20)
client.loop_stop()
Server:
import paho.mqtt.client as mqtt
from paho.mqtt.subscribeoptions import SubscribeOptions
import time
def on_message(client, userdata, message):
try:
print ("request recieved at server")
print (message.payload)
resopnse_topic = message.properties.ResponseTopic
client.publish(resopnse_topic, 'server message',1, properties=message.properties)
print ('response sent from server')
except Exception:
print('error')
client = mqtt.Client(client_id='server', protocol=mqtt.MQTTv5)
client.tls_set(tls_version=mqtt.ssl.PROTOCOL_TLS)
client.username_pw_set("test_server_username", "password")
client.connect("suburl.s1.eu.hivemq.cloud", 8883, 10)
client.subscribe('common', options=SubscribeOptions(noLocal=True))
client.on_message = on_message
client.loop_start()
time.sleep(100)
client.loop_stop()
目前网上可以免费进行测试的MQTT Broker提供商非常多, 这次我是使用HiveMQ来进行测试的, 国内也比较推荐EMQX, 基本上都只是在tls_set / username_pw_set / connect处填写的参数有所不同, 都用MQTT标准客户端即可, 我这用的就是paho (Python的paho-mqtt). 整体所用代码逻辑基本和我以前在ARM的Linux上写的一致, 当时经过测试是完全ok的, 而现在在RISC-V的Linux上运行的结果也正常, 说明在这种场景RISC-V已经可以替代ARM了, 期待推出更多的产品.

