te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>pyserial - Sending dictionary value with hex numbers over serial in python - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

pyserial - Sending dictionary value with hex numbers over serial in python - Stack Overflow

programmeradmin4浏览0评论

I have a dictionary with commands (ASCII with extended characters and hex numbers), that should be sent over serial to a microcontroller.

But I'm not able to get the right format for the value to be sent. How can I do this correctly?

I'm using Python 3.13.2.

command= {
    "cmd_a": 'AT\r',
    "cmd_b": 'AT+HTTPINIT\xAE\r',
    "cmd_c": 'AT+CGMM\xC7\xB4\r',
}

cmd_to_send = at_cmd.get("cmd_c") 

comport.write(cmd_to_send ??)  

I have a dictionary with commands (ASCII with extended characters and hex numbers), that should be sent over serial to a microcontroller.

But I'm not able to get the right format for the value to be sent. How can I do this correctly?

I'm using Python 3.13.2.

command= {
    "cmd_a": 'AT\r',
    "cmd_b": 'AT+HTTPINIT\xAE\r',
    "cmd_c": 'AT+CGMM\xC7\xB4\r',
}

cmd_to_send = at_cmd.get("cmd_c") 

comport.write(cmd_to_send ??)  
Share Improve this question edited 2 days ago mkrieger1 23.2k7 gold badges63 silver badges79 bronze badges asked Feb 17 at 21:59 BEsmartBEsmart 516 bronze badges 4
  • 1 Make the values byte strings instead of character strings. – Barmar Commented Feb 17 at 22:06
  • comport.write((command + "\r\n").encode()) – danielRICADO Commented Feb 17 at 22:10
  • What went wrong? Was there an error? You may have luck making these values into byte strings like b'AT\r' and b'AT+HTTPINIT\xAE\r'. – tdelaney Commented Feb 18 at 6:42
  • If you have more questions after this question has been answered, post a new question (after doing some research first, to check whether the question has already been answered). Please do not add "edit" to this question to ask new questions. – mkrieger1 Commented 2 days ago
Add a comment  | 

1 Answer 1

Reset to default 2

To use Serial.write() you need to pass a byte string as an argument. Here are some ways to do this:

Method 1 — use str.encode() method:

command = {
    "cmd_a": 'AT\r',
    "cmd_b": 'AT+HTTPINIT\xAE\r',
    "cmd_c": 'AT+CGMM\xC7\xB4\r',
}

cmd_to_send = command.get("cmd_c")

comport.write(cmd_to_send.encode('utf-8'))

Method 2 — start every string with b:

command = {
    "cmd_a": b'AT\r',
    "cmd_b": b'AT+HTTPINIT\xAE\r',
    "cmd_c": b'AT+CGMM\xC7\xB4\r',
}

cmd_to_send = command.get("cmd_c")

comport.write(cmd_to_send)

Method 3 — use bytes():

command = {
    "cmd_a": 'AT\r',
    "cmd_b": 'AT+HTTPINIT\xAE\r',
    "cmd_c": 'AT+CGMM\xC7\xB4\r',
}

cmd_to_send = command.get("cmd_c")

comport.write(bytes(cmd_to_send, 'utf-8'))

To be sure, you can use type checking.

For methods 1 and 3:

if type(cmd_to_send) is str:
    comport.write(...)

For method 2:

if type(cmd_to_send) is bytes:
    comport.write(cmd_to_send)
发布评论

评论列表(0)

  1. 暂无评论