arduino 串口JSON指令发送

http://www.geek-workshop.com/thread-3407-1-1.html


我是一个PHP 程序员,休闲的时候也谢谢python ,小时候就很喜欢电子产品,现在发现了arduino真是太高兴了,休息的时间又可以有个东西玩玩了,但是写惯了PHP 在回来写C发现真是心有余力不足,好吧废话不多说了,最近准备弄个小车,可过年时预定的零件还不能马上发到货,于是先写个伪代码吧,首先我想到的就是和串口的数据交互问题,看了好多文章都不是我想要的做法,由于常使用JSON 我对JSON 还是很有把握的于是找到了aJSON这个库,看了DEMO觉得这个真是太棒了,写了点代码基本实现了我想要的参数传递。小弟新手请大家多多指教。

实现要求
     参数传递(由PYTHON 或 processing 通过串口发送给ARDUINO) 格式:{"motor":{"left":100, "right":20}, "servo":{"servo_1":90}}

基本的想法就是想把数据结构化些,并且JSON 好多语言也有支持,实在不行构造也简单,下面的代码只实现了简单的几个参数

{
        "motor":{
                "left":100,
                "right":20
        },
       "servo":{
               "servo_1":90
      }
}


当然也可以加更多例如  

{
        "motor":{
                "left":100,
                "right":20
        },
       "servo":{
               "servo_1":90,
               "servo_2":40,
               "servo_3":20,
      },
      "led":{
               "led_1":1,
               "led_2":0,
               "led_3":1,
      },
     "test":"xxx"
}
屏幕快照 2013-02-15 下午11.48.12副本.jpg

代码如下:

ARDUINO 代码 复制打印
  
  
  1. #include <aJSON. h>
  2. aJsonStream serial_stream (&Serial );
  3.  
  4. void setup ( )
  5. {
  6.    Serial. begin ( 9600 );
  7. }
  8.  
  9. void loop ( )
  10. {
  11.  
  12.    if (serial_stream. available ( ) ) {
  13.     /* First, skip any accidental whitespace like newlines. */
  14.     serial_stream. skip ( );
  15.    }
  16.    if (serial_stream. available ( ) ) {
  17.     /* Something real on input, let's take a look. */
  18.     aJsonObject *msg = aJson. parse (&serial_stream );
  19.     ComExecution (msg );
  20.     aJson. deleteItem (msg );
  21.    }
  22. }
  23.  
  24.  
  25. void ComExecution (aJsonObject *msg )
  26. {
  27.   aJsonObject *motor = aJson. getObjectItem (msg, "motor" ); //电动机指令速度
  28.    if (motor ) { //电机参数存在
  29.       aJsonObject *motor_left = aJson. getObjectItem (motor, "left" ); //左速度
  30.       aJsonObject *motor_right = aJson. getObjectItem (motor, "right" ); //右速度
  31.        if (motor_left ) {
  32.              //左侧电机功能
  33.  
  34.              //
  35.              Serial. println (motor_left->valueint ); //速度为整型值
  36.              //Serial.println(motor_left->valuestring);//字符串
  37.  
  38.        }
  39.        if (motor_right ) {
  40.              //右侧电机功能
  41.  
  42.              //
  43.              Serial. println (motor_right->valueint );
  44.        }
  45.    }
  46.  
  47.   aJsonObject *servo = aJson. getObjectItem (msg, "servo" ); //舵机指令角度
  48.    if (servo ) { //舵机参数存在
  49.       aJsonObject *servo_1 = aJson. getObjectItem (servo, "servo_1" );
  50.        if (servo_1 ) {
  51.              //舵机1的功能
  52.  
  53.              //
  54.              Serial. println (servo_1->valueint );
  55.        }
  56.    }  
  57.  
  58. }

aJSON.zip

21.33 KB, 下载次数: 259


要通过ESP01S发送AT指令获取心知天气的南昌天气信息,您可以使用以下示例代码: ```c #include <SoftwareSerial.h> SoftwareSerial espSerial(2, 3); // 将ESP01S的TX引脚连接到Arduino的D2引脚,RX引脚连接到D3引脚 void setup() { Serial.begin(9600); // 初始化串口通信 espSerial.begin(9600); // 初始化ESP01S串口通信 delay(2000); // 等待ESP01S启动 } void loop() { // 发送AT指令以检查ESP模块是否正常工作 espSerial.println("AT"); delay(1000); while (espSerial.available()) { Serial.write(espSerial.read()); } // 发送AT指令以连接WiFi网络 espSerial.println("AT+CWJAP=\"Your_SSID\",\"Your_Password\""); delay(5000); while (espSerial.available()) { Serial.write(espSerial.read()); } // 发送AT指令以获取天气信息 espSerial.println("AT+CIPSTART=\"TCP\",\"api.seniverse.com\",80"); delay(5000); while (espSerial.available()) { Serial.write(espSerial.read()); } espSerial.println("AT+CIPSEND=108"); delay(1000); while (espSerial.available()) { Serial.write(espSerial.read()); } espSerial.println("GET /v3/weather/now.json?key=Your_API_Key&location=Nanchang&language=zh-Hans&unit=c HTTP/1.1"); espSerial.println("Host: api.seniverse.com"); espSerial.println("Connection: close"); espSerial.println(); delay(5000); while (espSerial.available()) { Serial.write(espSerial.read()); } // 关闭ESP01S模块 espSerial.println("AT+CIPCLOSE"); delay(1000); } ``` 请确保将代码中的`Your_SSID`替换为您的WiFi网络名称,`Your_Password`替换为您的WiFi密码,`Your_API_Key`替换为您的心知天气API密钥。 此代码通过Arduino与ESP01S模块进行串口通信,使用AT指令与ESP01S进行通信。它首先检查ESP01S是否正常工作,然后连接WiFi网络。然后,它发出HTTP请求以获取南昌天气信息,并将响应打印到Arduino串口监视器。 请注意,此代码仅作为示例,可能需要根据您的具体情况进行修改和调试。您可能需要安装并使用ESP8266库来支持ESP01S模块。 希望这对您有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值